一、业务层事务控制
1.1.1基本的事务控制
@Service
public class UserServiceImpl implements UserService{
@Override
public void addUser() {
try {
System.out.println("开启数据库事务");
System.out.println("新增用户");
int a = 1/0;//异常
System.out.println("提交数据库事务");
}catch (Exception e){
System.out.println("事务回滚");
}
}
}
1.1.2两种动态代理模式
业务层如果有多个方法,则每个方法都需要控制事务. 代码重复率高.在业务层不方便做,但是又不得不做的事情,可以放到代理对象中
业务层应该只处理业务,不要和事务代码耦合在一起.否则扩展性不好,耦合性高.
如何解决: 采用代理机制解决.
代理模式特点
说明: 一般采用代理模式,主要的目的就是为了解耦.将公共的通用的方法(功能/业务)放到代理对象中. 由业务层专注于业务执行即可.(将事务开启+invoke()+事务提交都放在代理对象里)
用户以为调用的是目标方法,其实调用的是代理对象
新建一个代理包proxy里新建一个代理类JDKproxy/CGlibproxy
关于框架中使用的代理模式:
Spring框架中:
1. Spring中默认采用的动态代理的规则是JDK代理,如果被代理者没有接口.则自动使用CGLIB
2. 如果需要修改为cglib代理,则需要在配置类的开启AOP的注解添加如下代码
@Configuration
@ComponentScan("com.jt