多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 概述 面向切面编程思想.把一些共性内容进行抽离,在需要使用的地方,以动态代理的方式插入,在不修改源码的基础上还能对源码进行增强.spring就是把动态代理进行层层封装,诞生出了AOP思想. ## AOP应用 1. 权限拦截. 2. 日志的输出. 3. 事务管理. 4. 性能检测. 5. .... ## 底层技术 1. JDK动态代理,不用导包,JDK提供好了. 2. CGLIB动态代理.第三方的,需要导包.相比JDK的动态代理,只要有目标类就可以增强(原理是对目标对象进行继承代理.).如果目标代理被final修饰将不能被CGLIB代理. 如果目标类有接口,spring默认使用JDK动态代理.如果目标类没有接口,spring使用CGLIB动态代理. ## 区别 1. JDK动态代理:代理对象和被代理对象不是继承关系,只是实现了同一个接口,是兄弟关系. 2. CGLIB动态代理:代理对象和被代理对象是继承关系,代理对象使用继承增强被代理对象. ## AOP名词 1. JoinPoint(连接点):目标对象中,所有可以增强的方法.spring只支持方法类型的连接点. 2. Ponitcut(切入点):目标对象中,已经增强的方法.就是被增强的代码. 3. Advice(通知/增强): 增强的代码. 4. Introduction(引介): 引介是一种特殊的通知,在不修改类代码的前提下,引介可以在运行期为类动态的添加一些方法或字段. 5. Target(目标对象):被代理对象. 6. Weaving(织入):将通知应用到切入点的过程. 7. Proxy(代理):将通知织入到目标对象之后形成的代理对象. 8. aspect(切面):切入点 + 通知. ## 步骤 1. 4个基础包+2个日志包+spring-aop.jar,spring-aspect.jar,com.springsource.org.aopalliance-1.0.0,com.springsource.org.aspectj.weaver-1.6.8.RELEASE. 2. 准备目标对象. 3. 准备通知. 4. 配置进行织入,将通知织入目标对象. ## 通知类型 1. 前置通知. 2. 后置通知. 3. 环绕通知. 4. 异常通知. 5. 最终通知(异常也调用).