我有一个应用程序正在为服务和 Dao 层使用基于注解注解的依赖注入(inject)。现在需要一些条件,一些 dao 将在内存数据结构而不是 db 中运行。 所以,我正在考虑编写这些 dao 的新实现。 由于该服务已经有带有 dao 名称的注释,我不确定如何将内存中的注释注入(inject)它。
我应该在注入(inject)后用内存中的覆盖数据库还是有另一种干净的方法? 如果我使用 xml,我会为内存中的 dao 使用不同的 xml。
提前致谢, 阿曼
最佳答案
如果您的内存 dao 类仅在应该使用它的情况下存在(更确切地说:仅在类扫描时发现),那么您可以在 @Primary
@Primary
表示当找到多个候选时应优先考虑该 bean。
也许你也应该看看 Spring 3.1 feature: Profiles .
另一种方法是编写一个配置,根据某些环境参数返回正确的 bean,并在 primary 上注释:
/**
* 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;
}
}
}
关于xml - 条件依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5665063/