GeXiangDong

精通Java、SQL、Spring的拼写,擅长Linux、Windows的开关机

0%

Autowired注解加载构件的顺序

仅仅Autowired注解

@Autowired在查找构件时,会从构件库中查找所有构件,查找所有是被注解变量的类型或该类型的子类。

  1. 如果找到了且只找到了一个,那么就给被注解变量设置成此构件。
  2. 如果一个也没找到,看Autowired注解的required参数的值,如果是true(默认值)则失败,终止spring环境的启动;如果是false则给被注解变量赋值为null。
  3. 如果找到了多个:
    1. 如有在找到的多个中有且仅有一个构件被标注了@Primary,则使用这个。
    2. 如果@Primary有多个或者一个也没有,终止spring环境的启动,抛出异常。

Autowired注解和Qualifier注解一起使用

在使用@Autowired注解装载构件时,可以增加一个@Qualifier指定一个待装载构件的名字

1
@Autowired @Qualifier("thisone") MyObject myObject;

上面这种写法可以解决多个MyObject的子类被设置成component的状况
相应的,在构件上有两种写法:

1
2
3
@Service("thisone")
public MyObject{
}

也可以

1
2
3
4
@Qualifier("thisone")
@Service
public MyObject{
}

注意给构件起名不要重复,重名会抛异常的。