- 一、对象是否允许注入校验
- 二、对泛型的转换校验
- 三、匹配指定名称对象
- 四、判断主要对象注入
- 五、按顺序注入
- 六、通过类型、名称筛选注入
一、对象是否允许注入校验spring依赖注入大致要经历六个环节:
二、对泛型的转换校验@Bean注解中有一个属性:autowireCandidate。该属性的默认值是true,也即是说当前对象默认情况下是允许注入的;如果该属性的值设置为false,那么就表明该对象是不允许注入的,如果此时@Autowired中的required属性没有设置成false,那么此次注入就会报错。
三、匹配指定名称对象Java中的接口中可能有像是UserInterface
这样的,当一个对象实现了这类接口的时候(如:UserService implements UserInterface),spring就会根据实现类上所写的来初始化实例对象。
四、判断主要对象注入如果在创建实例对象时加上了@Qualifier(“userService”)这样的注解,那么只需要在需要注入的属性上方加上相同的注解,该属性就只会加载拥有相同注解的的实例对象。
五、按顺序注入当一个类对象含有多个的时候,如果其中某一个对象加上了@Primary注解,那么spring在注入的时候就会默认以加了@Primary注解的对象注入对应的属性中。
六、通过类型、名称筛选注入当一个类对象含有多个的时候,只要每个对象的头部都加上了@Priority(“xx”)这样的注解,那么spring会默认取数值最小的那个对象注入需要依赖注入的属性中。
经过上述五个过程的过滤后,如果仍旧含有多个对象,那么spring会先按照类型筛选出与需要注入属性类型相同的对象,如果相同的对象还有多个,那么spring会根据属性名成来取出其中某个key值与其相同的对象注入,如果没有key相同的对象,那么spring注入的时候就会报错。



