2011-04-14 95 views
3

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

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

由于提前, 阿曼

回答

1

如果您在内存DAO类只存在(更多exctly:只在类扫描发现),在它应该使用的情况下,比你能@Primary它。

@Primary指示当找到多个候选者时应该给予bean优先权。你可以看看Spring 3.1 feature: Profiles

的另一个方法是先写一个配置,这取决于一些环境参数返回正确的豆与初级注释:

/** 
* 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; 
     } 
    } 
}