Aop
面向切面编程 aspect oriented programing
aop关注的不再是程序代码中的某个类,某些方法,考虑更多的是一种面到面的切入,即层与层之间的一种切入。
用处:
aop主要用于日志记录,性能统计,安全控制,事务处理等方面,实现公共功能性的重复使用。
好处:
1. 降低模块与模块之间的耦合度,提高业务代码的聚合度。
2. 提高代码的复用性。
3. 提高系统的扩展性。
基本概念
连接点 Joinpoint
被拦截到的每个点,spring中指被拦截到的每一个方法,spring aop 一个连接点即代表一个方法的执行。
切入点 Pointcut
对连接点进行拦截的定义。即匹配规则的定义,规定拦截哪些方法,对哪些方法进行处理。
通知 advice
拦截到每一个连接点后要做的操作。
前置通知 before:执行连接点方法前通知
返回通知 afterturn:连接点方法正常结束后返回的通知
异常通知 afterThrow:连接点方法出异常时通知
最终通知 after :连接点方法结束时通知
环绕通知 around:包围连接点方法的通知
切面 Aspect
切面则是横切关注点的抽象。
目标对象 Target
被代理的目标对象
织入 Weave
将切面应用到目标对象,并生成代理对象的这个过程即为织入
引入 Introduction
在不修改原有应用程序代码的情况下,在程序运行期为类动态添加方法或者属性的过程为引入。
AOP处理日志问题
1. 命名空间 2 配置aop代理 <aop:aspectj-autoproxy/>
代理模式实现三要素
1.接口定义 2.目标对象和代理对象实现统一的接口 3. 代理对象持有目标对象的引用,增强目标对象行为
代理模式实现分类以及对应区别
静态代理:手动为目标对象制作代理对象,即在程序编译阶段完成代理对象的创建
动态代理:在程序运行期动态创建目标对象对应的代理对象
jdk动态代理:被代理目标对象必须实现摸一个或某一组接口,通过回调创建代理对象。
cglib动态代理:被代理目标可以不必实现接口,通过继承实现。
动态代理好处:提高开发效率,可以批量化创建代理,提高代码复用率。