2011-04-15 36 views
0

从应用程序代码中实例化DAO类的好处是什么?也就是说,为什么不直接实例化DAO类?情况是这样的:从应用程序实际实例化DAO类的远程DAO类有什么用途

Class CreateIocContainer{ 
    p s v main(String[] args){ 
     new IocContainer("springMetadataFile.xml"); 
    } 
} 

Class ClassThatInstantiatesServicesViaSpringBean{ 
    Services services; 
    // bean setter for services class 
    setServices(Services services){ 
     this.services = services 
    } 
} 

Class ServicesImpl implements Services 
    ServicesDao servicesDao; 

    String getSomethingFromDB(String argumentForQuery){ 
     return servicesDao.getSomethingFromDB(argumentForQuery); 
    } 
} 

Class ServicesDaoImpl implements ServicesDao{ 

    String getSomethingFromDb(String argumentForQuery){ 
     //code to return something from db 
     return queryResultString; 
    } 
} 

此外,将I类叫类ClassThatInstantiatesServicesViaSpringBean是一个工厂类,通常被命名为类XFactory

+1

没有得到你想问什么。你能详细说一下吗? – Saurabh 2011-04-15 11:43:12

回答

2

您的DAO始终是它们从不是类的接口。这个DAO基本上是一个设计模式。 DAO与其实现的分离为分离对象持久性机制和数据访问逻辑提供了一种很好的技术。明天

今天你提到的豆xml文件,

<bean name="ServiveDao" class="com.example.ServiceImplHibnernate"> 
    <property name="sessionFactory" ref="sessionFactory"/> 
    </bean> 

但是你可能希望你的应用程序中使用由你做了不同的实现在不改变客户端代码。例如,您已经使用ibatis重写了实现,并添加了其他功能以匹配您的需求。所以,你写一个类

class ServiceImplIBAtis implements ServiceDao {..} 

和更改的XML文件来加载执行

<bean name="ServiveDao" class="com.mycompany.ServiceImplIBAtis"> 
    <property name="sessionFactory" ref="sessionFactory"/> 
    </bean> 

到底在哪儿豆ServiceDao引用的春天将注入ServiceImplIBAtis实例,而不是ServiceImplHibnernate。现在您的应用程序不需要知道背景中发生了什么变化。所有它需要知道的是有一个称为Service的dao,并且有可用于数据访问的方法。

+0

噢好吧,以便我可以有不同DAOimpl类的实现,而无需更改DAO – slex 2011-04-15 15:26:27

+0

是的,这就是对的。 – kalyan 2011-04-15 18:20:17