2.3. @Qualifier 2.3.1. 介绍
如果 Spring 容器中拥有多个候选 Bean,Spring 容器在启动时也会抛出BeanCreationException异常。
Spring 允许我们通过@Qualifier注释指定注入 Bean 的名称。
2.3.2. 实例
…
<bean id="office" class="com.baobaotao.Office">
<property name="officeNo" value="001"/>
</bean>
<bean id="office2" class="com.baobaotao.Office">
<property name="officeNo" value="001"/>
</bean>
…
我们在 Spring 容器中配置了两个类型为Office类型的 Bean,当对 Boss 的office成员变量进行自动注入时,Spring 容器将无法确定到底要用哪一个 Bean,因此异常发生了。
@Autowired
public void setOffice(@Qualifier("office")Office office) {
this.office = office;
}
@Qualifier("office")中的office是 Bean 的名称,所以@Autowired和@Qualifier结合使用时,自动注入的策略就从 byType 转变成 byName 了。@Autowired可以对成员变量、方法以及构造函数进行注释,而@Qualifier的标注对象是成员变量、方法入参、构造函数入参。正是由于注释对象的不同,所以 Spring 不将@Autowired和@Qualifier统一成一个注释类。
public class Boss {
@Autowired
private Car car;
@Autowired
@Qualifier("office")
private Office office;
…
}
对成员变量使用 @Qualifier 注释
public class Boss {
private Car car;
private Office office;
@Autowired
public Boss(Car car , @Qualifier("office")Office office){
this.car = car;
this.office = office ;
}
}
对构造函数变量使用 @Qualifier 注释
@Qualifier只能和@Autowired结合使用,是对@Autowired有益的补充。一般来讲,@Qualifier对方法签名中入参进行注释会降低代码的可读性,而对成员变量注释则相对好一些。
2.4. @Resource 2.4.1. 介绍
@Resource 的作用相当于 @Autowired,只不过 @Autowired 按 byType 自动注入,面 @Resource 默认按 byName 自动注入罢了。@Resource 有两个属性是比较重要的,分别是 name 和 type,Spring 将 @Resource 注释的 name 属性解析为 Bean 的名字,而 type 属性则解析为 Bean 的类型。所以如果使用 name 属性,则使用 byName 的自动注入策略,而使用 type 属性时则使用 byType 自动注入策略。如果既不指定 name 也不指定 type 属性,这时将通过反射机制使用 byName 自动注入策略。
Resource 注释类位于 Spring 发布包的 lib/j2ee/common-annotations.jar 类包中,因此在使用之前必须将其加入到项目的类库中。
2.4.2. 实例 package com.baobaotao;
import javax.annotation.Resource;
public class Boss {
// 自动注入类型为 Car 的 Bean
@Resource
private Car car;
// 自动注入 bean 名称为 office 的 Bean
@Resource(name = "office")
private Office office;
}
一般情况下,我们无需使用类似于@Resource(type=Car.class)的注释方式,因为 Bean 的类型信息可以通过 Java 反射从代码中获取。
<bean
class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"/>
一般情况下,我们无需使用类似于@Resource(type=Car.class)的注释方式,因为 Bean 的类型信息可以通过 Java 反射从代码中获取。
CommonAnnotationBeanPostProcessor实现了BeanPostProcessor接口,它负责扫描使用了 JSR-250 注释的 Bean,并对它们进行相应的操作。
重要提醒!!内容中联系方式并非本站联系方式,报名咨询的学员请与下面最新联系方式联系我们咨询报名-以免损失!
>>长期招聘兼职招生代理人员,项目合作,团报优惠咨询,有意者请联系我们 >>咨询:13312524700(可加微信)。
云南地州中心:◆咨询电话:0871-65385921、17787865775 冯老师、 王老师(微信报名:17787865775)
总部报名地址: ◆昆明市-五华区教场东路莲花财富中心10楼;网课试听:ke.xuekaocn.cn
地州分校: 大理分校 丽江分校 迪庆分校 怒江分校 红河分校 临沧分校 玉溪分校 文山分校 保山分校 德宏分校 昭通分校 普洱分校 版纳分校 【各地州学员请加老师微信咨询报名,电话(微信):133-1252-4700】;【2021年云南省成人高考>>立即报名】
职业技能考证:心理咨询师、健康管理师、茶艺师等更多>◆咨询电话:133 1252 4700(微信)
公考培训咨询:◆国考云南省考公务员/事业单位面授培训,咨询电话:133 1252 4700 (微信)