AOP 的概念
1:理解AOP是什么
* AOP是Aspect-oriented programming 面向切面(方面)的编程的简写
* AOP的实现可以把业务逻辑和系统级的服务进行隔离,使业务逻辑跟各个系统级服务的耦合度降低,
* 提高程序的重用性和开发效率
* 业务逻辑:某个类的某个方法本身要实现的功能.
* 系统级的服务:系统的日志,事务,权限验证
* 举例:村支书找村民通知一个事情, 原来要一个一个分别去告诉他们,有了AOP(广播)以后,对广播以后,大家都知道
2:怎么实现AOP
* AOP的底层实现的原理都是动态代理
* 注意:动态代理有两种方式:jdk动态代理 /cglib动态代理
* jdk的动态代理机制只能代理实现了接口的类
* cglib的动态代理既可以代理实现了接口的类,也可以代理没有实现接口的类
3:AOP一些专业术语
* 切面(Aspect) 就是交叉在各个业务逻辑中的系统服务,类似于安全验证,事务处理,日志记录都可以理解为切面
* 织入(weaving) 就是将切面代码插入到目标对象某个方法的过程,相当于我们在jdk动态代理里面的 invocationHandler接口方法的内容
* 连接点(JointPoint) 理论上可能被切面织入的所有方法 ,比如addStudent,delStudent ,getStudentList.....
通常所有方法都可以被称为连接点
* 切入点(PointCut) 就是实际上被切面织入的方法
* 目标对象(target) 就是切入点和连接点所属的 类 StudentService
* 通知(Advice) 就是切面的实现,切面织入的目标对象,时间点(方法执行前 ,后,前后,异常)以及内容
* 顾问(Advisor) 其实就是通知的一个封装和延伸,可以将通知以更为复杂的方式织入到某些方法中
* 将切面织入到目标对象的连接点方法,使连接点成为切入点
4:Spring的AOP实现
4.1 搭建springAOP开发环境需要引入的jar包
* aopalliance-1.0.jar
* spring-aop-4.2.1.RELEASE.jar
注意:引入lib包到项目中
4.2 :各种通知(前置通知,后置通知,环绕通知,异常通知)
* 前置通知 implement MethodBeforeAdvice
* 后置通知 implement AfterReturningAdvice
* 环绕通知 implement org.aopalliance.intercept.MethodInterceptor;
* 异常通知 implement ThrowsAdvice
4.3 :配置通知和应用通知
* 注册通知 <bean id = "beforeAdvice" class = ""/>
* 注册代理生成器(注入目标类接口,目标类,通知)
4.4 通知的注意点
* 在代理类生成器的配置里面 配置接口的<property name = "interfaces" value="接口" >默认可以省略
* 因为后置通知是在目标方法执行后才执行 ,他可以得到目标方法返回的值 ,但是不能改变他的值
* 环绕通知有在目标方法执行前的代码,也有在目标方法执行后的代码,可以得到目标方法的值,也可以改变它
网友评论