我有一个应用程序,它使用基于注释注释的依赖注入服务和dao层。现在需要一些条件,一些dao将在内存数据结构而不是db中运行。 所以,我正在考虑编写那些dao的新实现。 由于该服务已经有名称为dao的注释,我不知道如何注入内存中的注释。
我应该在注射后用内存中的数据库覆盖db数据库还是有另一种干净方式? 如果我使用xml,我会使用不同的xml作为内存中的dao。
提前致谢, 阿曼
答案 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;
}
}
}