当前位置: 首页 > 知识库问答 >
问题:

如何用构造函数注入验证bean

范翰飞
2023-03-14

我有一个接口,它在两个地方定义如下:

@Configuration
public class AppContext {
    @Bean
    public SomeInterface usageOne() {
        return new SameImpl();
    }

    @Bean
    public SomeInterface usageTwo() {
        return new SameImpl(someOtherConfig);
    }

    @Bean
    public Client clientOne(SomeInterface usageOne) {
        return new Client(usageOne);
    }

    @Bean
    public OtherClient clientTwo(SomeInterface usageTwo) {
        return new OtherClient(usageTwo);
    }
}

我的客户端实现类没有任何注释,只有必需的构造函数。在这种情况下,如何限定正确的接口实现用法?我不想使用@primary,因为在我的例子中,将其中一个用法命名为primary在语义上是不正确的(它们在某种意义上是相等的)。我需要用相同的实现类传递相同的接口,但针对受尊敬的客户机的特定用例进行了不同的配置。我想命名一个参数就足够了,通过这个参数我将实现注入到bean创建方法中,但是Spring抱怨说:需要一个bean,但是2个were found。我不明白应该如何使用@qualifier注释。

我使用Spring Boot2.0.4.Release和在单独的配置类中创建的受尊敬的bean和客户端运行,因此在创建OtherClient时,我不能像以下那样调用usageTwo()方法:new OtherClient(usageTwo());,因为客户端配置类中没有此方法。

共有1个答案

蒋正平
2023-03-14

正如@chrylis在注释中提到的,您可以简单地将@qualifier注释添加到@bean方法中,如下所示:

@Bean
public Client clientOne(@Qualifier("usageOne") SomeInterface usageOne) {
    return new Client(usageOne);
}

@Bean
public OtherClient clientTwo(@Qualifier("usageTwo") SomeInterface usageTwo) {
    return new OtherClient(usageTwo);
}

@qualifier注释指定的值是相应bean的名称。这是相应的@bean方法的名称,或者是注释的值(如果像下面这样使用)@bean(“usageThree”)

 类似资料:
  • 问题内容: 我的spring bean具有一个带有唯一强制性参数的构造函数,我设法用xml配置对其进行了初始化: 然后,我像这样使用此bean,并且效果很好。 但是我想用注释指定contructor arg值,例如 这可能吗 ? 提前致谢 问题答案: 首先,必须在bean定义中而不是在注入点中指定构造函数arg。然后,你可以利用spring的注释(spring 3.0) 就我所看到的问题而言,这可

  • 我正试图在计算机上实现这个例子https://developer.android.com/jetpack/docs/guide.这就解释了Android应用程序的结构。 当我使用相同的代码时,我会出现以下错误。 我可以找出这个错误与 当我为ViewModel编写默认的零输入构造函数时,我得到了以下错误。 我想不出这个错误的原因和解决方法。

  • 问题内容: 我有一堂课: 配置文件 我如何将其注入一些构造函数,即: 我希望此字符串具有从Config注入的值。那可能吗? 问题答案: 您将必须命名Bean,然后在自动装配引用该名称时使用注释。 例: 配置文件 SomeC.java

  • 注入是将依赖注入对象的过程。 构造函数注入很常见。 在此过程中,依赖项作为参数注入构造函数。 请参阅下面的示例。 创建一个名为GuiceTester的java类。 GuiceTester.java import com.google.inject.AbstractModule; import com.google.inject.Guice; import com.google.inject.Inj

  • 请帮助理解在哪种情况下我应该使用构造函数注入和设置器注入。请帮我举个合适的例子。 先谢谢你。