使用spring applicationContext选择接口实现?

时间:2012-09-03 11:01:56

标签: java spring jpa jdbc phpmyadmin

我正在使用Eclipse Juno IDE和phpMyAdmin。

我有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机制进行选择? 它是如何工作的?

2 个答案:

答案 0 :(得分:2)

为什么需要JPA和JDBC实现(JPA基于JDBC)?

区分两者的方法是创建2个单独的DAO类(都实现您的界面)

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

并在需要时在spring xml(应用程序上下文文件)中注入适当的DAO bean。

例如,应用程序上下文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);

答案 1 :(得分: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"/>