java - 提供单个@Bean,可用于在多个接口(interface)中注入(inject)

标签 java spring javabeans autowired

考虑下面的代码

public interface Iface1 { }
public interface Iface2 { }

public class A implements Iface1, Iface2 {

}

@Configuration
public class AutoConfig {

  @Bean
  Iface1 provideIface1Impl() {
      return new A();  // instance no 1234
  }

  @Bean
  @ConditionalOnBean(A.class)
  @Autowired
  Iface2 provideIface2Impl(A aImpl) {
    return aImpl;
  }
}

我希望第二个 @Bean 方法与第一个 (1234) 中的实例 Autowiring ,并且我希望第二个 @Bean 方法返回相同的实例,以便我可以为 Iface1Iface2 的客户端使用相同的实例。

当前的问题是 spring 不运行第二个 @Bean 因为没有 A.class 类型的 @Bean -创建的 bean 被视为 Iface1,即使它的类型为 A

最佳答案

只需定义 bean A。当注入(inject) IFace1 和 Iface2 时,它们将自动解析为 A(当然,如果 A 是唯一的实现)。

@Bean
public A a() {
    return new A();
}

关于java - 提供单个@Bean,可用于在多个接口(interface)中注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47528922/

相关文章:

java - 谷歌地图 - 我正在尝试更新当前位置,但我的应用程序一打开就关闭了。这是代码-

java - Spring JPA 属性表达式通过列表中项目的交集查找

java - 将 javabean 初始化为随机值的方法

java - 从 JSP(form) 获取信息到 Java Bean

java - java中打印bean对象

Java Mockito 模拟方法时出现 InvalidUseOfMatchersException

java - 获取一周中的前一天

java - 用反射打破 JIT 优化

java - 尝试使用 CORS 时出现 403(禁止访问)

java - 如何通过 Spring 框架实例化使用泛型的对象?