spring日记(七):声明式事务机制
/>
关于@Transactional的属性:
* propagation:事务传播行为,例如:@Transactional(propagation=Propagation.REQUIRES_NEW)
* isolation:事务隔离级别,例如:@Transactional(isolation=Isolation.READ_COMMITTED)
* readOnly:事务读写性,boolean型
* timeout:超时时间秒
* rollbackFor:一组异常类,遇到就回滚类型为:Class<? extends Throwable>[],默认为{},例如:@Transactional(rollbackFor={SQLException.class, IOException.lcass})
* rollbackForClassNmae:一组异常类名字
* noRollbackFor:一组异常类,遇到不回滚
* noRollbackForClassName:一组异常类型的名字,遇到不回滚
>> 多线程的困惑
单实例Bean的最大好处是线程无关性,不存在多线程并发访问的问题,也就是线程安全的。而一个类能够以单实例的方式运行的前提是无状态,也就是说该类不能有状态化的成员变量。我们知道传统的DAO必须持有一个Connection,而Connection即使状态化的对象。但spring通过ThreadLocal将有状态的变量Connection本地线程化,达到另一个层面上的线程无关从而实现线程安全。
>> 不能被spring AOP事务增强的方法:
基于接口的动态代理了:public之外的所有方法(还包括public static方法)
基于CGLib的动态代理:private、static、final(这个要特别注意了)