Hibernate和spring整合后为什么要用DAO接口

比如:DAO层接口设计:InterfaceStudentDAO{publicvoidInsertStudent(Studentstu);publicvoidremoveS... 比如:DAO层接口设计:
Interface StudentDAO
{
public void InsertStudent(Student stu) ;

public void removeStudent(long id) ;

public void updateStudent(Student stu) ;

public Student findStudent(long id) ;

/**
*其它DAO方法
**/
}
接口跟实现类都是一一对应的,为什么要用接口,不解,请高人指点迷津
楼下说的是 实现类名字变了,仍然是向上转型,所以不用做任何修改是吗?只对于这里有作用吗?
展开
 我来答
侨宜楠u4
推荐于2016-07-11 · TA获得超过259个赞
知道小有建树答主
回答量:61
采纳率:0%
帮助的人:113万
展开全部
第一点,公司开发在设计阶段要将任务模块化,然后分给不同的人甚至小组并行开发。必须设定好各个模块的接口(当然包括Dao接口),通过接口规范方法名和参数,不然将来集成的时候每个人写的规范不一样麻烦就大了。
举个例子 在你没有写好DAO层的代码的时候,只要别人知道你的接口,就知道要怎么与你的DAO层进行通信了。

第二点,使用接口能够隐藏实现过程,方便程序维护和升级。举个例子 就DAO层的接口吧。StudentDAO studentDAO=null;然后我可以通过spring注入一个OrcStudentDao();//对Orcal数据库的CRUD操作。当我的公司再开发一个项目和这个很类似,但是要使用Mysql数据库的时候只要实现这个Dao接口,然后通过spring注入一个MqlStudentDao();就行了,其他所有调用到这的代码通通不用改。不然就吐血去吧。

最重要的当然是第三点了 ,前两点我想光吐血还可以--毕竟有的人血厚么,这个就是半人马酋长来了也得抓狂-----
----第三点,spirng的aop当然是spring的核心之一=》事物管理又是aop的核心功能之一=》spring的aop实际上就是特殊的拦截器=》spring的拦截器实际上有两种底层的实现方式,默认的是使用jdk的动态代理=》而jdk的动态代理要求必实现类必须实现接口。好了自己往回反着推,我直接说结果吧,在你关心的这块就是Hibernate和Spring整合的时候无法使用spring 的事务管理(这简直是灾难,因为事物有八种传播特性,事物基本上都发生在Dao层,都写在代码里零零散散无法维护不说,极容易因为失误出现事物管理问题,比如数据库连接没有关闭啦,数据没有提交到数据库啦,脏数据啦... 各种灵异的问题)。好吧我承认,前面的是吓唬你的,spring的AOP有两种底层的实现,一种是刚才说的默认情况下是使用JDK的动态代理,另一种需要强制的使用cglib的动态代理,但是要引入cglib的jar库,cglib是通过继承实现动态代理的,不需要接口,但是使用cglib是不推荐的方法,这个只是用来解决遗留问题的。

除次之外随着你学习的深入,将精力从编码转向到设计的时候,你就知道接口,抽象,封装,继承... 这些的好处了,这不是一言能尽的事。
以上是个人的理解不是标准答案
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式