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



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

interface A;
class B implements A;
class C implements A;
class D {
    @Resource
    private list<A> list;
}

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

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

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

Spring 支持以下 DI 注释:

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

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

区别在于@Resource是标准的java注解(来自JSR-250),Spring也支持它的注入。

我个人使用 @Autowired 作为@Resource只支持字段和 setter 注入,而@Autowired支持更多,例如构造函数和多参数方法注入。

最新更新