我正在使用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机制进行选择? 它是如何工作的?
答案 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"/>