2012-09-20 52 views
1

我有一個包含類核心模塊:BaseDao接口自動裝配不同的豆類

@Autowired 
private BaseDao dao; 

和幾個實現:

class JdbcBaseDaoImpl implements BaseDao {...} 
class HibernateBaseDaoImpl implements BaseDao {...} 

和少量模塊,這些模塊使用類從核心模塊(使用maven)。 但是在第一個模塊中,我想使用JdbcBaseDaoImpl實現該核心模塊的字段,並在第二個模塊中使用HibernateBaseDaoImpl實現。

如何做到這一點?換句話說,如何在第二模塊核心模塊中使用類

@Autowired 
@Qualifier("jdbcBaseDaoImpl") 
private BaseDao dao; 
第一模塊中

@Autowired 
@Qualifier("hibernateBaseDaoImpl") 
private BaseDao dao; 

回答

4

註釋是@Qualifier("<name>")。有關更多詳細信息,請參見this

順便說一句,這個Java EE等價物是@Resource(name="<name>")

如果這些模塊要在同一個進程空間中運行,那麼就不可能根據代碼路徑有條件地向核心模塊中的相同變量注入不同的實現。您可以將BaseDao引用推送到依賴模塊中,爲每個模塊注入適當的引用,並將其作爲引用傳遞給需要它的核心模塊的方法。

如果這些模塊要在不同的進程空間中運行,那麼可以在特定於進程的彈簧配置文件(我們將生產和單元測試階段的實現分離)中爲每個模塊配置相應的實現。

+0

是的,我知道。但我想在兩個模塊中使用不同的dao實現。如果這個字段將在這些模塊中,而不是核心模塊(在這種情況下,我可以使用@Qualifier註釋),我不會有問題 – nemocean

+0

哦!我以爲你在尋找註釋。我試圖更新我的迴應,我將如何做到這一點。你能檢查什麼時候有機會嗎? – Vikdor