2012-09-03 69 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/ –