由於您的DAO是可交換的,它們繼承相同類型(抽象類或接口)。因此你可以寫一個RoutingDetailsControllerDAO
。
比方說,你的通用接口被命名爲DetailsControllerDAO
,有兩種方法getDetails
和getMoreDetails
,代碼將是:現在
public class RoutingDetailsControllerDAO implements DetailsControllerDAO {
private DetailsControllerDAO firstDAO;
private DetailsControllerDAO secondDAO;
protected DetailsControllerDAO getDAOToUse() {
return YOUR_BOOLEAN_CONDITION ? firstDAO : secondDAO;
}
@Override
public Details getDetails() {
return getDAOToUse().getDetails();
}
@Override
public Details getMoreDetails() {
return getDAOToUse().getMoreDetails();
}
// Insert firstDAO and secondDAO setters below
...
}
你的Spring XML配置爲:
<bean id="detailsController" class="com.something.detailsController" >
<property name="dao" ref="routingDetailsControllerDAO"/>
</bean>
<bean id="routingDetailsControllerDAO" class="com.something.RoutingDetailsControllerDAO">
<property name="firstDao" ref="firstDao"/>
<property name="secondDao" ref="secondDao"/>
</bean>
不確定您是否可以在xml級別執行此操作。你可以做的可能是將兩個daos作爲lazy init連接到類中,並連接布爾條件。然後在該類中根據布爾條件使用dao。在這種情況下,只會創建使用的dao實例 –