Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么@resource可以找到实现接口的所有类并将它们作为列表注入_Java_List_Spring Boot_Interface_Inject - Fatal编程技术网

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的以下注释:

  • @Resource
    ,基于资源名称的注入的JavaEE规范
  • JavaEE规范的
    @Inject
    ,保持代码兼容
  • @Autowired
    ,@Inject的弹簧专用计数器部分

不是
@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
,这将有助于研究它的工作原理。