发布时间 : 星期日 文章spring--day02笔记更新完毕开始阅读516d5999aeaad1f347933f30
1 AOP
1.1 介绍
? ?
AOP Aspect Oriented Programing 面向切面编程
AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码 经典应用:性能监视、事务管理、安全检查、缓存) Spring AOP使用纯Java实现,不需要专门的编译过程和类加载器,在运行(反射)期通过代理方式向目标类织入增强代码
? AspectJ是一个基于Java语言的AOP框架,Spring2.0开始,Spring AOP引入对Aspect的支持,AspectJ扩
展了Java语言,提供了一个专门的编译器,在编译时提供横向代码的织入
1.2 术语(重要)
? ? ? ? ? ? ? ?
Target :目标类,需要被增强程序。
JoinPoint:连接点,目标类中可以被增强的方法。例如:addUser、updateUser
PointCur:切入点,已经被增强的连接点JointPoint。增强已经生效。例如:addUser 切入点 是 连接点 一个子集。
Advice:增强/通知,用于增强的方法。例如:before() /after() Intruduction 引介,特殊通知:类添加方法或字段等。(了解) Weaving 织入:将通知(增强)应用目标类,生产代理过程。 Proxy:代理
Aspect 切面:将通知Adivce 和 切入点 PointCut 结合在一起。
? 切面类:用于存放所有的通知Adivce
1.3 手动代理
? 编写目标类
? 编写切面类(通知)
? 编写代理类(将通知 和 目标类 结合--织入)
1.3.1 动态代理:接口+实现类
1.3.1.1 目标类
public interface UserService { public void addUser(); public void updateUser(); } public class UserServiceImpl implements UserService { @Override public void addUser() { System.out.println(\); } @Override public void updateUser() { System.out.println(\); } } 1.3.1.2 切面类
/** * 切面类:提供多个通知(advice),通知就是用于增强代码 * @author * */ public class MyAspect { public void before(){ System.out.println(\开启事务\); } public void after(){ System.out.println(\提交事务\); } }
1.3.1.3 代理类
public class TestApp { @Test public void demo01(){ //自己创建实例 UserService userService = new UserServiceImpl(); userService.addUser(); userService.updateUser(); } @Test public void demo02(){ //spring创建实例,及工厂创建。 UserService userService = MyBeanFactory.getBean(); userService.addUser(); userService.updateUser(); } }