永发信息网

用spring的事物管理,dao一定要有接口吗

答案:2  悬赏:0  手机版
解决时间 2021-02-14 10:00
  • 提问者网友:刺鸟
  • 2021-02-13 20:55
在spring的事物管理中,是不是DAO层不需要有接口,spring的代理是用的jdk动态代理实现的吗?
最佳答案
  • 五星知识达人网友:雪起风沙痕
  • 2021-02-13 22:01
Spring的动态代理是它Spring容器自己的代理机制。 至于DAO层的接口,到现在以我的经验来说,可有可无;如果项目非常大,牵涉到很多其他的系统之间的通信,那么请很好地使用接口;如果只是一个单一的小项目,那就没什么必要了。。。因为我们现在讲究的都是敏捷开发。。。
全部回答
  • 1楼网友:青灯有味
  • 2021-02-13 23:11
第一点,公司开发在设计阶段要将任务模块化,然后分给不同的人甚至小组并行开发。必须设定好各个模块的接口(当然包括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是不推荐的方法,这个只是用来解决遗留问题的。 除次之外随着你学习的深入,将精力从编码转向到设计的时候,你就知道接口,抽象,封装,继承... 这些的好处了,这不是一言能尽的事。 以上是个人的理解不是标准答案
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯