当前位置: 首页 > 面试题库 >

春季—注入2个相同类型的豆

松正阳
2023-03-14
问题内容

我喜欢基于构造函数的注入,因为它允许我进行注入的字段final。我还喜欢注释驱动的注入,因为它简化了我的操作context.xml@Autowired只要没有两个相同类型的参数,就可以用标记构造函数,并且一切正常。例如,我有一个课:

@Component
public class SomeClass {
    @Autowired(required=true)
    public SomeClass(OtherClass bean1, OtherClass bean2) {
        …
    }
}

以及具有以下内容的应用程序上下文:

<bean id="bean1" class="OtherClass" />
<bean id="bean2" class="OtherClass" />

应该有一种在类的构造函数上指定bean ID的方法SomeClass,但是我在文档中找不到它。是否有可能,或者我是否梦想着不存在的解决方案?


问题答案:

@Autowired是按类型(在这种情况下);用于@Qualifier按照spring
docs中
的示例自动按名称接线:

public SomeClass(
    @Qualifier("bean1") OtherClass bean1, 
    @Qualifier("bean2") OtherClass bean2) {
    ...
}

注意:与@Autowired适用于字段,构造函数和多参数方法(允许在参数级别缩小限定符注释的范围)相反,@
Resource仅支持具有单个参数的字段和bean属性设置器方法。因此,如果注入目标是构造函数或多参数方法,请坚持使用限定符。

(下面的文字是完整的示例)



 类似资料:
  • 问题内容: 我想以不在Bean中对Spring创建依赖项的方式注入类路径资源的URL。意味着,bean不应该使用Spring的接口/类。我怎样才能做到这一点? 问题答案: Spring能够将值隐式转换为: 。

  • 问题内容: 在Spring中,有没有一种方法可以自动用一个类型及其所有子类型的bean填充列表?我有一个setter方法,如下所示: 我想在MyType的任何bean和MyType的所有子类中自动装配。 谢谢杰夫 问题答案: 是的,您可以这样做。春天的文档说: 通过将注释添加到需要该类型数组的字段或方法中,也可以从ApplicationContext提供特定类型的所有bean。 请注意,它说您需要

  • 问题内容: 我有一个非常简单的抽象类 现在您可以看到,我正在尝试自动连接DatabaseModel。但是在我的扩展类中,我只为dbModel接收null。 问题:我在这里尝试一些不可能的事情吗? 问题答案: 您的设置似乎很好。原因也许在其他地方。也许您正在使用实例化该类,而不是让spring这样做。

  • 问题内容: 我有以下定义。 在我的bean定义中,我有两个相同类型的bean 如果有所不同,则从另一个xml文件导入第二个bean。它们也设置了不同的属性。为什么spring不会抛出错误,因为已经定义了2个相同类型的bean。它是否使用变量名,因为它们与bean id匹配。dao是不同的,如果我对两个不同的bean使用@Qualifiers,则功能可以按预期工作。 这是一个更简洁的版本。我没有考虑

  • 问题内容: 有人可以用简单的术语解释ProxyFactoryBean吗? 我看到很多地方都引用了它。 问题答案: 用于将拦截器逻辑应用于现有目标Bean,以便在调用该Bean上的方法时,拦截器在该方法调用之前和之后执行。这是面向方面的编程(AOP)的示例。 最好用一个简单的例子来解释。AOP的经典用例是将缓存应用于方法调用的结果。可以使用以下方式进行连接: 我们有一个类型为bean 的类型,它实现

  • 问题内容: 在我的课堂上,我有如下依赖性: 依赖项注入在Oracle JDK 8中工作:字段已成功注入非空值。 现在,我尝试在JDK 9中运行该应用程序(不做任何修改)。结果是不再触发依赖项注入:用此注释注释的所有内容都保留了。 停止工作的原因可能是什么? 在项目中使用Spring 4.0.9。 这是一个演示该问题的测试项目:https : //github.com/rpuch/test-spri