我有一个接口和两个这个接口的实现
界面定义:
public interface DoSomething {}
两个实现:
public ImplementationOne implements DoSomething{}
public ImplementationTwo implements DoSomething{}
然后在另一个类中,我想根据条件得到一个不同的实现(ImplementationOne或ImplementationTwo),我怎么能用Spring做到这一点?
像...这样的东西。
Public ServiceManager {
Private DoSomething doSomething = null;
Public void do() {
If (condition1) {
doSomething = new ImplementationOne();
} else {
doSomething = new ImplementationTwo();
}
}
}
答案 0 :(得分:1)
您绝对应该使用@Autowire注释自动连接ApplicationContext类型。然后,如果你这样做:
@Autowire
ApplicationContext context
然后你应该得到你想要的豆子:
context.getBean(yourDesiredType.class)
根据你的例子,你可以获得任何匹配类型的bean。
答案 1 :(得分:1)
另一个需要考虑的选择是配置bean - 例如 -
@Configuration
public class EntityRepositoryConfiguration {
private Map<Entity, EntityRepository> entityEntityRepositoryMap = new HashMap<>();
protected EntityRepositoryConfiguration() {
entityEntityRepositoryMap.put(Entity.Book, new BookRepository());
}
@Bean
public EntityRepository getByEntityType(Entity entity) {
return entityEntityRepositoryMap.get(entity);
}
}
然后将配置bean注入其他bean并使用getEntityType方法(例如)来注入bean。