如何使用spring为同一个接口动态注入不同的实现

时间:2017-05-01 11:35:57

标签: java spring

我有一个接口和两个这个接口的实现

界面定义:

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();
}
}
}

2 个答案:

答案 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。