概念
AOP采取横向机制,将分散在各个方法中的重复代码提取出来,然后在程序编译或运行时,再将这些提取出来的代码应用到需要执行的地方。即横向重复,纵向抽取。
实现AOP的原理
- 动态代理
被代理对象必须要有接口。 - cglib代理技术
可以对任何类生成代理对象,原理是对目标对象进行继承,因此目标对象不能被final修饰。
实际上Spring两种都支持,如果有借口优先使用动态代理。
AOP术语
- joinpoint(连接点):目标对象中所有可以增强的方法。
- pointcut(切入点):目标对象中已经增强的方法。
- advice(通知/增强):增强的代码。
- target(目标对象):被代理对象。
- weaving(织入):将通知应用到连接点的过程。
- proxy(代理):将通知织入到目标对象之后,形成代理对象。
- aspect(切面):切入点+通知
基于XML的声明式AspectJ
切入点表达式
execution(* com.me.aop.*.*(..))