我没有看到两种方式之间的区别,@Qualifier总是与@Autowired一起使用。@Qualifier和@Resource之间的区别
@Autowired
@Qualifier("alpha")
VS
@Resource(name="alpha")
任何人都可以让我知道有什么区别?谢谢!
我没有看到两种方式之间的区别,@Qualifier总是与@Autowired一起使用。@Qualifier和@Resource之间的区别
@Autowired
@Qualifier("alpha")
VS
@Resource(name="alpha")
任何人都可以让我知道有什么区别?谢谢!
@Autowired
可以单独使用。如果单独使用,它将按类型连线。因此,如果在容器中声明了多个相同类型的Bean,则@Autowired
不知道要使用哪个bean注入的问题。因此,请使用@Qualifier
和@Autowired
一起说明通过指定bean名称(通过名称连接)实际连接的bean。
@Resource
也通过名称连接。因此,如果@Autowired
与@Qualifier
一起使用,则与@Resource
相同。
区别在于@Autowired
和@Qualifier
是弹簧注释,而@Resource
是标准java注释(来自JSR-250)。另外,@Resource
只支持字段和setter注入,而@Autowired
支持字段,setter,构造函数和多参数方法注入。
建议使用@Resource
进行字段和setter注入。坚持使用@Qualifier
和@Autowired
作构造函数或多参数方法注入。
见this:
如果要表达的名字注解驱动的注入,不 主要使用@Autowired - 即使是在技术上能够通过@Qualifier值指 一个bean的名字。相反,更喜欢JSR-250 @资源注释,它的语义定义是通过其唯一的名称来标识特定的目标组件,其中声明的类型 与匹配过程无关。
它在哪里说的?如果你想通过名字自动装载,我发现它说要使用它,我不知道它在哪里建议使用资源(在某些情况下它实际上不会工作)。 – 2012-02-02 03:04:42
更新。它在3.11.3的提示部分中说过 – 2012-02-02 03:11:41
@Autowired是老派的春天。 @Resource是Java EE CDI标准。 Spring处理这两个(以及@Inject,这非常相似),并且在两种情况下都做了几乎相同的事情。我会推荐@Resource,@Autowired是在标准之前制定的,并且似乎主要是为了向后兼容性而提供支持。
所以你的意思是@Resource是当前的春季标准。我们应该在我们的Spring beans中使用@Resource而不是@ Autowired – 2017-07-18 06:49:39
我面临着@Autowired一些问题,然后使用@Qualifier开始,我终于能够找出定义相同类型的多个Bean时用于@Autowired @Qualifier用。
假设你定义2种豆同一类型但不同的价值观:
<bean id="appContext1" class="com.context.AppContext">
<constructor-arg value="abc" />
<bean/>
<bean id="appContext2" class="com.context.AppContext">
<constructor-arg value="ABC" />
<bean/>
然后,如果你只是要使用@Autowire,那么你必须使用相同的变量名作为bean名字否则它的会发现多个类型的错误。
@Autowired
AppContext appContext;
对于上述用例,您必须使用限定符。
@Autowired
@Qualifier("appContext1")
AppContext appContext;
而是,如果使用与bean名称相同的变量名称,则可以消除@Qualifier的使用。
@Autowired
AppContext appContext1;
我总是使用变量名同bean的名字,却意外地有一些其他的变量名和面临这个问题。
让我知道是否有任何疑问。
[@Resource vs @Autowired]可能的重复(http://stackoverflow.com/questions/4093504/resource-vs-autowired) – skaffman 2012-02-02 09:24:06