- 开始学习spring就被重点的关注ioc和aop这两个关键的部分,今天着重了解下关于aop的一些实现和原理。
- aop 面向切面编程 即可以在业务逻辑前后加上需要的无关业务的处理如日志,权限控制等操作,与实际的业务相分离。
- 首先需要介绍的技术就是AspectJ 了解了这个之后会对spring的aop实现有对比显示出两者的差异。aspectJ是一个由java实现的aop框架,通过对编译期的代码进行编译 让代码具有aop的功能。
- 切面就是切点与通知的一个组合,在切面内部定义了两个部分
- 切点 pointcut 即需要应用切面的方法,
- pointcut 函数名 call(){匹配表达式}
pointcut recordLog():call(* HelloWord.sayHello(..));
- 通知 advice 需要在目标方法前后执行的函数
- before 前置通知 目标方法执行前
- after 后置通知 目标方法执行后
- after returning 方法返回通知 目标方法返回时执行
- after throwing 异常通知 目标方法抛出异常时执行
- around 目标函数中 执行 可以控制目标函数是否执行 环绕通知
- 目标函数 称为连接点 joinPoint
- 织入 指代码切入到目标函数的过程 例如aspectJ到java程序的过程称为织人
- 静态织入 aspectJ 编译为class文件后在目标类中织入
- 动态织入 jdk动态代理 cglib
@Aspect
public class AspectJ {
/**
* 前置通知
*/
@Before("execution(* aop.UserDao.addUser(..))")
public void before(){
System.out.println("前置通知");
}
/**
* 后置通知
*