java中@Qualifier是什么用法
答案:2 悬赏:50 手机版
解决时间 2021-03-04 09:12
- 提问者网友:愿为果
- 2021-03-04 00:40
java中@Qualifier是什么用法
最佳答案
- 五星知识达人网友:低血压的长颈鹿
- 2021-03-04 01:51
@Qualifier("XXX") Spring的Bean注入配置注解,该注解指定注入的Bean的名称,Spring框架使用byName方式寻找合格的bean,这样就消除了byType方式产生的歧义。
Spring的IoC的xml配置文件方式会让XML文件变的比较长而且繁琐,所以自JDK 1.5之后,越来越多的框架推出注解配置,Spring的Bean注入就可以通过@Resource、@Autowire标记此处要注入bean,Spring框架通过反射方式给字段注入合适的对象。
@Autowire注解按照类型,即注解的字段的类型寻找该类型的实例bean,这种方式成为byType。这种方式会引发歧义,比如UserDAO整个框架可能有N多个该对象,那么Spring框架会采用一定规则寻找bean(转换为byName寻找,失败后报错)
@Resource是JDK提供的注解,默认就是按照byName的方式寻找bean,一般一个name对应一个bean,当找不到与名称匹配的bean才会按照类型装配(byType)。
想要让@Autowired方式按照name方式注入,可以结合@Qualifier("XX")使用,让@Autowired按照byName方式装配。
eg:
1 @Autowired
2 @Qualifier("userDAO")
3 private UserDAO userDao;
Spring的IoC的xml配置文件方式会让XML文件变的比较长而且繁琐,所以自JDK 1.5之后,越来越多的框架推出注解配置,Spring的Bean注入就可以通过@Resource、@Autowire标记此处要注入bean,Spring框架通过反射方式给字段注入合适的对象。
@Autowire注解按照类型,即注解的字段的类型寻找该类型的实例bean,这种方式成为byType。这种方式会引发歧义,比如UserDAO整个框架可能有N多个该对象,那么Spring框架会采用一定规则寻找bean(转换为byName寻找,失败后报错)
@Resource是JDK提供的注解,默认就是按照byName的方式寻找bean,一般一个name对应一个bean,当找不到与名称匹配的bean才会按照类型装配(byType)。
想要让@Autowired方式按照name方式注入,可以结合@Qualifier("XX")使用,让@Autowired按照byName方式装配。
eg:
1 @Autowired
2 @Qualifier("userDAO")
3 private UserDAO userDao;
全部回答
- 1楼网友:西岸风
- 2021-03-04 03:25
在使用spring框架中@autowired标签时默认情况下使用 @autowired 注释进行自动注入时,spring 容器中匹配的候选 bean 数目必须有且仅有一个。当找不到一个匹配的 bean 时,spring 容器将抛出
beancreationexception 异常,并指出必须至少拥有一个匹配的 bean。
spring 允许我们通过 @qualifier 注释指定注入 bean 的名称,这样歧义就消除了,可以通过下面的方法解决异常。
@qualifier("xxx") 中的 xx是 bean 的名称,所以 @autowired 和 @qualifier 结合使用时,自动注入的策略就从 bytype 转变成 byname 了。
@autowired 可以对成员变量、方法以及构造函数进行注释,而 @qualifier 的标注对象是成员变量、方法入参、构造函数入参。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯