前置及存在的知识点:
1、异常分类:运行时异常(unchecked)、编译时异常(checked)
2、事务的传播机制、隔离机制
3、jdk动态代理、cglib代理原理
Springaopjdk动态代理与cglib动态代理切换原则:
java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方
法前调用InvokeHandler来处理。而cglib动态代理是利用asm开源包,对代理
对象类的class文件加载进来,通过修改其字节码生成子类来处理。
1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP
2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP
3、如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动
态代理和CGLIB之间转换
下面我们先大致说明一下spring声明式事务的原理,然后再分析在什么情况下,
spring的声明式事务会失效.
代理模式
我们知道,spring的声明式事务是基于代理模式的.那么说事务之前我们还是大致
的介绍一下代理模式吧.其实代理模式相当简单,就是将另一个类包裹在我们的
类外面,在调用我们创建的方法之前,先经过外面的方法,进行一些处理,返回之
前,再进行一些操作.比如:
publicclassUserService{
...
publicUsergetUserByName(Stringname){
returnuserDao.getUserByName(name);
}
...
}
那么如果配置了事务,就相当于又创建了一个类:
publicclassUserServiceProxyextendsUserService{
privateUserServiceuserService;
...
publicUsergetUserByName(Stringname){
Useruser=null;
评论0