日期:2014-05-20  浏览次数:20744 次

面试很囧。。spring的声明式事务问题。。
今天面试被问Spring的声明式事务为何要加在业务层,还问加在业务层是怎么实现控制事务的。。。

我一听就晕了。。。以前都是在hibernate中用session实现事务控制,话说这加在业务层的控制怎么作用到session上的??
难道声明式事务控制在底层依然是加在了dao层? spring是怎么知道dao层用的什么框架?

------解决方案--------------------
其实就是AOP,说穿了就是通过动态代理来实现的,spring为你生成的对象都是代理对象。他不用关心你用什么框架还是JDBC之类的,他只需要你告诉他什么方法需要事务,那么他会这个方法原子操作了。具体的建议去了解一下反射和动态代理。了解过后你就清楚了
------解决方案--------------------
业务层被看做是一个完整的可能是多个dao操作的原子流程,其中一个dao操作失败,则全部回滚。
spring aop对事务支持比较出色,有声明式事务和注解配置事务,都比较简单。具体配置网上很多。
------解决方案--------------------
我就会简单的用,不知道为什么。比你更囧。。。
------解决方案--------------------
因为dao知识负责单步数据库操作,Action只是负责与 client交互数据。 真正的业务处理是在service层,一个service方法就是我们的一个业务原子操作。 

控制用spring aop 拦截我们感兴趣的方法
------解决方案--------------------
探讨

引用:

其实就是AOP,说穿了就是通过动态代理来实现的,spring为你生成的对象都是代理对象。他不用关心你用什么框架还是JDBC之类的,他只需要你告诉他什么方法需要事务,那么他会这个方法原子操作了。具体的建议去了解一下反射和动态代理。了解过后你就清楚了


这事务的aop代码加在哪层了我还没搞清楚。。。。

------解决方案--------------------
探讨

因为dao知识负责单步数据库操作,Action只是负责与 client交互数据。 真正的业务处理是在service层,一个service方法就是我们的一个业务原子操作。

控制用spring aop 拦截我们感兴趣的方法

------解决方案--------------------
首先给你讲Spring的声明式事务为何要加在业务层,
如果你对这方面的研究不熟悉的话。
你就说spring的核心就是aop,它就是为了把日志,
安全,性能和业务逻辑区别开。所以它要把Spring的声明式事务要加在业务层

还问加在业务层是怎么实现控制事务的
它是通过拦截器把你的方法拦截,用代理工厂产生一个对象。就这么简单
------解决方案--------------------
呃。。
貌似业务层指的是service层吧。
不明白你们凭什么觉得事务是封装在dao层了
------解决方案--------------------
AOP 配置的时候运用通配符 全部在你的service逻辑方法前切入事物控制,dao写到service里面是因为一个业务可能同时调用多个dao 而这多个dao构成同一个逻辑---事务的完成性,至于它是怎么实现的,去看源代码,其实事务的AOP 可以自己去写的
------解决方案--------------------
探讨
引用:

引用:

其实就是AOP,说穿了就是通过动态代理来实现的,spring为你生成的对象都是代理对象。他不用关心你用什么框架还是JDBC之类的,他只需要你告诉他什么方法需要事务,那么他会这个方法原子操作了。具体的建议去了解一下反射和动态代理。了解过后你就清楚了


这事务的aop代码加在哪层了我还没搞清楚。。。。
……