为什么@resource可以找到所有类实现一个接口并将其作为列表注入

时间:2019-01-03 07:55:14

标签: java list spring-boot interface inject

我想在应用程序中插入一个列表。我的代码是这样的:

interface A;
class B implements A;
class C implements A;

class D {
    @Resource
    private list<A> list;
}

要注入list,我打算在xml中配置列表,但是我发现不需要。并且当我使用@resource时该列表已经注入到应用程序中,我想知道@resource在这里的工作方式。

2 个答案:

答案 0 :(得分:1)

它与用于注入依赖项的@Autowired相同。

不同之处在于@Resource是标准的Java注释(来自JSR-250),Spring也支持它进行注入。

我个人使用@Autowired,因为@Resource仅支持字段和设置器注入,而@Autowired支持更多内容,例如构造函数和多参数方法注入。

答案 1 :(得分:1)

@Resource注释告诉Spring在应用程序上下文中查找与所需类型匹配的任何bean,然后将其注入变量中。

在您的情况下,将字段指定为List<A>将向Spring表示您希望注入所有类型A的bean。

Spring支持DI的以下注释:

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