public @interface Autowired {
boolean required() default true;
}
相关注解:
- @Autowired:默认按类型装配,如果我们想使用按名称装配,可以结合@Qualifier注解一起使用(Spring提供)
- @Qualifier():指定装配的bean,多个实例时可以结合@Autowired一起使用
- @Primary:自动装配时当出现多个bean候选者时,被注解为
@Primary
的bean将作为首选者
- @Resource:默认按名称装配,当找不到与名称匹配的bean才会按类型装配(不支持
@Primary
和@Autowired(required = false)
功能,JDK提供)
- @Inject:需要导入javax.inject的包,和Autowired功能一样,但是没有
required=false
功能(JDK提供)
【2】自动装配
Spring利用依赖注入(DI)完成对IOC容器中各个组件的依赖关系赋值
@Autowired
自动注入(Spring提供的):
-
默认优先按照去容器中找对应的组件:applicationContext.getBean()
-
如果找到多个相同类型的组件,再将属性的名称作为组件的ID去容器中查找
-
@Qualifier()注解:该注解指定需要装配的组件ID,而不是使用属性名
-
自动装配默认必须要对属性赋值,没有就会报错,可以使用
@Autowired(required = false)
指定非必须就不会报错 -
@Primary注解:自动装配时当出现多个bean候选者时,被注解为
@Primary
的bean将作为首选者,否则将抛出异常,如果使用了@Qualifier()
指定装配的bean,则还是使用明确指定装配的bean
@Resource(JSR250)和@Inject(JSR330)(JDK提供的)
@Resource:
-
默认按照组件名称进行装配,也可以指定名称进行装配
-
当找不到与名称匹配的bean会按类型装配
-
不支持
@Primary
和@Autowired(required = false)
功能 -
如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常。
-
如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常。
-
如果指定了type,则从上下文中找到类似匹配的唯一bean进行装配,找不到或是找到多个,都会抛出异常。
-
如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为