Spring AOP的原理及实现
2018-09-17 本文已影响0人
空山Echo
一、安装STS插件
二、整合junit测试
- 导包 4+2+aop+test
- 对测试类@RunWith(SpringJUnit4ClassRunner.class)//帮我们创建容器
- ContextConfiguration("classpath:spring配置文件路径")//指定创建容器使用哪个配置文件
- @Resource(name="user")//将名为user的对象注入到测试类的变量中
private User u;
三、Spring中的AOP
-
AOP思想
纵向重复,横向抽取
image.png - Spring中的AOP概念
spring能为容器中管理的对象生成动态代理对象 - Spring实现AOP的原理
-
动态代理(有接口时优先)
被代理的对象必须要实现接口,才能产生代理对象,如果没有接口将不能使用动态代理
image.png
image.png -
cglb代理(没有接口)
第三方代理技术,cglb代理可以对任何类生产代理,代理的原理是对目标对象进行继承代理,如果目标对象被final修饰,则该类无法被cglb代理
image.png
image.png
四、AOP中名词解释
image.png-
导包 4(spring)+2(log)+2+2
image.png -
准备目标对象
image.png -
准备通知
image.png
image.png
- 配置进行织入,将通知织入目标对象
- 方式一、xml配置完成织入
spring applicationContext.xml中
- 导入aop约束
- 配置目标对象<bean class="ServiceImpl">
- 配置通知对象<bean class="MyAdvice">
-
配置将通知织入对象
image.png -
测试
image.png
- 方式二、注解
- spring applicationContext.xml中 开启
- 对通知类添加@Aspect
- 对通知类中的方法指定类型和切入点
- 其一:如下对各个方法添加注解
@Before(execution(切点表达式))
public void before(){} - 其二:可写抽取切点方法,供个方法使用
@Pointcut("execution(* 包名.+类名公共结尾部分.(..))")
public void pc(){}
@Before(类名.pc())
public void before(){}
- 其一:如下对各个方法添加注解