【发布时间】:2016-09-30 14:47:36
【问题描述】:
这是我的问题:我有一个基接口和两个实现类。
并且一个Service类对基接口有依赖,代码是这样的:
@Component
public interface BaseInterface {}
@Component
public class ClazzImplA implements BaseInterface{}
@Component
public class ClazzImplB implements BaseInterface{}
而且配置是这样的:
@Configuration
public class SpringConfig {
@Bean
public BaseInterface clazzImplA(){
return new ClazzImplA();
}
@Bean
public BaseInterface clazzImplB(){
return new ClazzImplB();
}
}
服务类对基础接口有依赖,会通过一些业务逻辑决定自动装配哪个实现。代码如下:
@Service
@SpringApplicationConfiguration(SpringConfig.class)
public class AutowiredClazz {
@Autowired
private BaseInterface baseInterface;
private AutowiredClazz(BaseInterface baseInterface){
this.baseInterface = baseInterface;
}
}
并且IDEA抛出异常:无法自动装配。BaseInterface类型的bean不止一个。
虽然使用@Qualifier可以解决,但是在这种情况下我不能选择依赖类。
@Autowired
@Qualifier("clazzImplA")
private BaseInterface baseInterface;
我尝试阅读 spring 文档,它提供了 Constructor-based dependency injection,但我仍然对这个问题感到困惑。
谁能帮帮我?
【问题讨论】:
-
这种时候我讨厌Java
-
@gdbj facepalm 是关于 spring,而不是 java 你在任何其他有 DI 的语言中都会遇到同样的问题。如果您尝试将 2 个 bean 连接到一个字段,您将拥有这个