Spring中的AOP
Spring中的AOP概念图示:
Spring实现AOP的原理:
1、动态代理(优先)
被代理对象必须实现接口,才能产生代理对象,如果没有接口将不能使用动态代理。
2、cglib代理(不需要接口)
第三方代理技术,cglib代理可以对任何类生成代理,代理的原理是对目标对象进行继承代理。
如果目标对象被final修饰,那么该类无法被cglib代理。
AOP名词:
Target(目标对象):被代理对象。
Joinpoint(连接点):目标对象中,所有可以被增强的方法。
Pointcut(切入点):目标对象,已经增强的方法。
Advice(通知/增强):增强的代码。
Weaving(织入):将通知应用到切入点的过程。
Proxy(代理):将通知织入到目标对象之后,形成的代理对象。
Aspect(切面):切入点+通知。
SpringAOP的使用:(分为xml配置和注解配置)
XML配置步骤:
1、导包
除了6个基础包之外,还需要4个包
2、准备目标对象(Target)
3、准备通知(Advice)
4、将通知织入目标对象
准备工作:导入AOP命名空间xmlns:context="http://www.springframework.org/schema/context"
配置文件进行织入
关于expression语句(从上往下一步一步演化)
public void com.service.UserServiceImpl.save() //只织入UserServiceImpl的public void save()方法
void com.service.UserServiceImpl.save() //public可以省略,一般不写
* com.service.UserServiceImpl.save() //任意返回值
* com.service.UserServiceImpl.*() //对任意空参方法进行织入
* com.service.UserServiceImpl.*(..) //对方法的参数不做要求
* com.service.*ServiceImpl.*(..) //对以ServiceImpl为后缀的对象的所有方法织入
* com.service..UserServiceImpl.*(..) //还会寻找service包下的子包(最常用)
注解配置步骤:
1、导包(和xml配置一样)
2、准备目标对象和通知对象(和xml配置一样)
3、将通知织入目标对象
准备工作:导入AOP命名空间xmlns:context="http://www.springframework.org/schema/context"
配置对象(也可以使用注解完成)
开启使用注解完成织入(一定要开启才有效)
在通知类中写注解
上述写法过于麻烦。维护有困难,可以将切点抽取出来,统一管理