2011-04-14 131 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; 
     } 
    } 
}