Java 为什么@resource可以找到实现接口的所有类并将它们作为列表注入
我想在我的应用程序中插入一个列表。我的代码如下所示:Java 为什么@resource可以找到实现接口的所有类并将它们作为列表注入,java,list,spring-boot,interface,inject,Java,List,Spring Boot,Interface,Inject,我想在我的应用程序中插入一个列表。我的代码如下所示: interface A; class B implements A; class C implements A; class D { @Resource private list<A> list; } 接口A; B类实现了A; C类实现了一个; D类{ @资源 私人名单; } 要插入列表,我打算用xml配置列表,但我发现我不需要这样做。当我使用@resource时,列表已经被注入到应用程序中,我想知道@res
interface A;
class B implements A;
class C implements A;
class D {
@Resource
private list<A> list;
}
接口A;
B类实现了A;
C类实现了一个;
D类{
@资源
私人名单;
}
要插入
列表
,我打算用xml配置列表,但我发现我不需要这样做。当我使用@resource
时,列表已经被注入到应用程序中,我想知道@resource
在这里是如何工作的。它与用于注入依赖项的@Autowired
相同
区别在于@Resource
是标准的java注释(来自JSR-250),Spring也支持它进行注入
我个人使用
@Autowired
作为@Resource
仅支持字段和setter注入,而@Autowired
支持更多,如构造函数和多参数方法注入 注释@Resource
告诉Spring在应用程序上下文中查找与所需类型匹配的任何bean,并将其注入变量中
在您的情况下,将字段指定为列表
将向Spring表明您希望注入所有类型的bean
Spring支持DI的以下注释:
,基于资源名称的注入的JavaEE规范@Resource
- JavaEE规范的
,保持代码兼容@Inject
,@Inject的弹簧专用计数器部分@Autowired
@Resource
,它告诉容器注入它已经拥有的实例。您正在寻找Spring组件扫描。我看不到@resource
注释是Spring启动应用程序的一部分。有一个javax
注释:@Resource
。请详细说明您的问题,包括使用@resource
的包名。@Prashant我的意思是@resource
我知道@resource
可以做到这一点。但是我想知道它是如何工作的,或者在哪里可以找到它是如何工作的,正如前面所说的,它表明Spring需要在应用程序上下文中寻找匹配的bean。应用程序上下文包含用bean限定注释(例如bean服务组件)标记的类的所有实例。我不是问这两个注释的不同之处,但我想知道@Resource
如何将所有类型A放入一个列表中。更高层次的原因是Spring使用反射拥有关于所有bean的所有元数据。将所有类型A
放入一个列表只相当于从applicationContext
中找出类型A
的所有bean,然后将它们逐个添加到列表中。这就是你想知道的吗?有点。有没有办法找到源代码@Resource
是如何工作的?我没有找到它。请查看CommonAnnotationBeanPostProcessor
和DefaultListableBeanFactory#resolveMultipleBeans
,这将有助于研究它的工作原理。