条件依赖注入

时间:2011-04-14 14:49:59

标签: xml spring dependency-injection annotations conditional

我有一个应用程序,它使用基于注释注释的依赖注入服务和dao层。现在需要一些条件,一些dao将在内存数据结构而不是db中运行。 所以,我正在考虑编写那些dao的新实现。 由于该服务已经有名称为dao的注释,我不知道如何注入内存中的注释。

我应该在注射后用内存中的数据库覆盖db数据库还是有另一种干净方式? 如果我使用xml,我会使用不同的xml作为内存中的dao。

提前致谢, 阿曼

1 个答案:

答案 0 :(得分:1)

如果你的内存dao类只存在(更多的是exctly:仅在类扫描时找到)应该使用它的情况,而不是@Primary到它。

@Primary表示在找到多个候选人时应优先考虑该bean。

您是否应该查看Spring 3.1 feature: Profiles

另一种方法是编写一个Configuration,取决于某些环境参数返回在primary注释的正确bean:

/**
 * I never have tried to inject a bean in a @Configuratution and
 * return it as @Bean annotated it with @Primary, so it is an experiment 
 * I would been glad to know if it works.
 */
@Configuration
public class Switch {
    @Value("#{systemProperties.inmemmory}") 
    private boolean inMemmory;

    @Resource
    @Qualifier("normal")
    private Dao normalDao;

    @Resource
    @Qualifier("inMemmory")
    private Dao inMemoryDao;

    @Bean
    @Primary
    public Dao dao() {
        if (inMemmory) {
            return inMemory;
        } else {
           return normalDao;
        }
    }
}