day3......
一、数据库转账之--事物分析
事物控制应该都是在业务层实现类中
以下操作应当只有一个Connection
控制事务:
1)首先设置自动提交为手动提交,即开启事务;
2)执行具体的操作;
3)根据需要,返回必要的数据;
4)关闭事务,释放资源;
二、动态代理
1、基于接口的动态代理
2、基于子类的代理
导入依赖cglib --》拷贝client和Producer类到包cglib下 --》
Producer用final来修饰一下
如何写动态代理的增强方法?是写动态代理的关键
作用:
真正的关闭连接,加回池子中
解决全栈中文乱码
3.使用动态代理实现事务控制
新建factory包,
三、Spring之AOP
1、AOP的概念
作用及优势:
实现方式:使用动态代理的方式
2、spring中的AOP术语和细节
1)术语
业务层中的方法都是连接点;所有的切入点都是连接点,但并不是所有的连接点都是切入点,
只有被增强的连接点是切入点;
2)AOP开发需要明确的事情
3)AOP中通知类型
通用化切入点表达式:
环绕通知:
public void aroundPrint(){
System.out.println("环绕通知:logger类中的aroundPrint方法开始记录日志。。。");
}
//切入点方法没有执行,而执行了通知方法
//下述解决方法:手动配置环绕通知,实现切入点方法的执行
四、Spring中基于注解的AOP配置
1)@Before @AfterReturning @AfterThrowing @After
2)@Around
执行调用顺序有一定的问题
使用环绕通知,没有顺序问题
总结:
动态代理:基于接口、基于子类
使用AOP实现代理
增强代码
作业:删除factory包,加入spring中的AOP实现对事物的控制?