2012-09-03 71 views
0

我正在使用Eclipse Juno IDE和phpMyAdmin。使用spring applicationContext選擇接口實現?

我有java應用程序,對於此應用程序,我在phpMyAdmin中創建了一個DB。 現在,我對DB方法的接口.. 讓說的界面是這樣的:

public interface DBInterface{ 
    public Vector<Employees> getAllEmplyess(); 
    public void addNewEmployee(int ID, String name,String department); 
} 

現在我需要通過兩種方式來實現此接口:

1)JPA

2)JDBC

可以說我用上面提到的兩種方法實現了接口。

如何在applicationContext.xml文件中使用spring機制進行選擇? 它是如何工作的?

+0

您不能將jdbc作爲接口實現,但可以創建基於接口的實現jdbc。 –

+0

JPA依賴於jdbc。 –

+0

我知道jpa是依賴於JDBC,但我的講師希望這兩個實現 – eliorsh

回答

2

爲什麼你需要兩個JPA和JDBC實現(JPA基於JDBC)?

在兩者之間進行區分的方法是創建2個獨立的DAO類(都實現您的接口)

public class JDBCDao implements DBInterface {...} 
public class JPADao implements DBInterface {...} 

並在需要時在注射彈簧XML(應用上下文文件)的適當DAO豆。

例如應用程序上下文XML將看起來像這樣: (所述的EmployeeService類的dao構件是DBInterface類型)

<bean id="JPADAO" class="com.yourpackage.JPADao".../> 
<bean id="JDBCDAO" class="com.yourpackage.JDBCDao".../> 

<bean id="EmployeeService" class ....> 
    <property name="dao" ref="JDBCDAO" /> 
    ... 
</bean> 

或可替代地可以注入在代碼中DAO。

ApplicationContext ctx = AppContext.getApplicationContext(); 
EmployeeService svc = (EmployeeService) ctx.getBean("EmployeeService"); 
DBInterface dao = (DBInterface) ctx.getBean("JPADAO"); 
svc.setDao(dao); 
+0

謝謝aviad,我知道jpa基於JDBC,但我的講師希望這兩個實現 – eliorsh

+0

爲什麼要考慮這兩個?也許是因爲編寫計劃JDBC解決方案通常會更快更簡單。所有都取決於模型,然後開發人員使用正確的工具進行工作。 JPA並不是每個持久性作業的正確工具(當考慮其他類型的數據存儲時,實際上並不基於JDBC)。 – DataNucleus

+0

嗨aviad,當我試圖獲取JPA bean,因爲你在代碼中寫入,我收到一個異常,說jpa提供程序沒有定義..所以我需要包括持久性文件在applicationContext文件? – eliorsh

1

且不說JPA取決於JDBC ....

如果你想控制它雖然的ApplicationContext XML文件中最簡單的方法是簡單地定義你所選擇的實現。假設你有兩個實現

public class JpaDB implements DBInterface { ... } 
public class JdbcDB implements DBInterface { ... } 

和一個希望將DBInterface服務,說

public class Service { 
    private DBInterface db; 

    public void setDBInterface(DBInterface db) { 
     this.db = db; 
    } 
} 

那麼你的Spring配置文件可能看起來像

... 
<bean id="service" class="com.company.service"> 
    <!-- Select either "jpa" or "jdbc" depending on preference --> 
    <property name="dbInterface" ref="jpa"/> 
</bean> 

<bean id="jpa" class="com.company.JpaDB"/> 
<bean id="jdbc" class="com.company.JpaDB"/> 
+0

謝謝johan我會嘗試 – eliorsh

+0

嗨約翰,當我試圖讓你在代碼中寫入JPA bean,我越來越一個例外說jpa提供程序沒有被定義..所以我需要在applicationContext文件中包含持久性文件嗎? – eliorsh

+1

@eliorsh,http://www.baeldung。com/2011/12/13/persistence-spring-3-1-and-jpa/ –