日期:2014-05-17  浏览次数:20678 次

面试时被问到spring是如何控制事务的?你是怎么回答的?
本帖最后由 defonds 于 2013-11-05 14:37:37 编辑
几次面试都遇到这样的问题,解释不出来。

就知道如何使用spring这框架,却说不来其原理,惭愧。

小弟诚心求教!
spring事务 事务管理 面试

------解决方案--------------------
spring的事务是通过“声明式事务”的方式对事务进行管理,即在配置文件中进行声明,通过AOP将事务切面切入程序。最大的好处是大大减少了代码量,比如:

Transaction tx=session.getTransaction();
session.beginTransaction();
tx.commit();
tx.rollback();

等等这类代码不用在每个方法中重复的去写,简化了程序,提高了工作效率。
------解决方案--------------------
1.IOC控制反转:控制权由对象本身转向容器,由容器对bean对象进行控制。
2.AOP面向切面编程:把具体的类创建对应的代理类,通过代理类来对具体类进行操作。
spring是一个容器,通过spring这个容器来对对象进行管理,根据配置文件来实现spring对对象的管理。
就这样理解吧,暂时我也只能这么回答,太深入我也不知道怎么说了
------解决方案--------------------
SPRING的事务贯彻始终的

源代码没有读过
但是不管AOP还是IOC都有事务支持的

推测一下
SPRING是一个大的容器,一个大的工厂类
那么当你从SPRING中获取一个对象的时候
在建立对象的时候
先开启了事务,然后将对象给你,让 你去使用
在你方法结束后会交回对象
这个时候提交事务并关闭事务

这些操作都在框架内实现
所以只要使用了SPRING就一定会被事务所包围着
------解决方案--------------------
要明白事务是怎么样的一个概念,自己写事务又如何做

try{
// 业务逻辑
if(成功)
  commit();
}catch(e){
  // 出现异常
  rollback();
}

spring会捕获到你往上抛的异常,然后帮你try catch,如果发现捕获到异常,会就把connection不提交,直接回滚,所以我们在配置声明式事务的时候会有一个参数是什么异常类,默认应该是runtimexcepttion吧...
------解决方案--------------------
去看看Java的动态代理就明白原理是怎么回事了。
------解决方案--------------------
我的建议是这样的,首先回答出IOC和AOP,然后简单的简绍这两个东西,说的不需要太多,但是要达到重点,然后,直接offer,
------解决方案--------------------
Spring是通过AOP的手段达到事务控制的,具体实现是靠spring-asm.jar和cglib.jar,因为这两个jar都提供了与动态代理有关的功能,实现运行时植入新特性的功能。类似的功能也可以通过我们手工实现,如果对字节码等概念掌握比较好,可以充分利用apache bcel库进行更为细致的功能控制。

以上内容不真实不可靠,仅供面试吹牛使用。你这么回答对方基本也不会深入问了,其实面试的人也不会具体细节的。
------解决方案--------------------
spring有两种事务配置方式,一种是配置的事务管理器,另一种的是代码控制的事务
配置的事务管理器的方式是我们经常用到的经常会用到在配置文件中。代码控制的事务分为jdbc模板的和事务管理器的,jdbc默认自动提交,事务管理器的和咱们通常的一样会有commit  rollback等操作。闲 的时候看一下开发指南吧