什么是AOP?
AOP的相关术语
- Joinpoint(连接点):
所谓连接点是指那些被拦截到的点。在 spring 中,这些点指的是方法,因为 spring 只支持方法类型的连接点。
- Pointcut(切入点):
所谓切入点是指我们要对哪些 Joinpoint 进行拦截的定义。
- Advice(通知/增强):
所谓通知是指拦截到 Joinpoint 之后所要做的事情就是通知。通知的类型:前置通知,后置通知,异常通知,最终通知,环绕通知。
- Introduction(引介):
引介是一种特殊的通知在不修改类代码的前提下, Introduction 可以在运行期为类动态地添加一些方法或 Field。
- Target(目标对象):
代理的目标对象。
- Weaving(织入):
是指把增强应用到目标对象来创建新的代理对象的过程。spring 采用动态代理织入,而 AspectJ 采用编译期织入和类装载期织入。
- Proxy(代理):
一个类被 AOP 织入增强后,就产生一个结果代理类。
- Aspect(切面):
是切入点和通知(引介)的结合。
AOP基于XML配置的入门案例:
- 首先导入IOC和AOP所需要的jar包
2.创建UserService类,这个类完成核心功能操作。
3.创建Logger类,这个类是用来做功能的增强。
4.在spring的beans.xml中开始进行AOP的配置:
- 首先把核心类和增强类的bean配置到IOC的容器中
- 使用<aop:config>标签在进行AOP的配置,先通过aop:aspect标签标明谁是增强类。然后在标签中进行aop:before(前置)、aop:after-returning(后置)、aop:after-throwing(异常)、aop:after(最终)的配置,让增强类的某个方法对核心功能类的某一类方法进行功能增强。
5.在测试类中测试UserService的方法是否被增强。
环绕通知
- 环绕通知是一种提供自由灵活对核心类方法进行增强的操作手段,首先还是在beans.xml中配置环绕通知。
2.接着我们需要在增强类中完善我们环绕通知的方法,这个方法需要定义一个ProceedingJoinPoint接口对象作为方法参数,且方法返回值是Object。
3.环绕通知的实现:其实就是通过ProceedingJoinPoint的实现类对象(spring框架会创建)获取要增强的那个类的方法参数、执行方法、获得方法返回值。然后在方法执行之前的操作就是前置通知、在方法执行后的操作就是后置通知、在异常处理中的操作就是异常通知、在finally中执行的操作就是最终通知。具体如下:
基于注解的AOP配置
- 首先按照基于XML配置的项目部署。
2.首先关于定义IOC容器的bean标签使用注解替换。
3.xml配置的切面配置信息我们在增强类中使用@Aspect注解替代。
4.xml配置切入点的前置通知、后置通知、异常通知、最终通知分别使用@Before、@AfterReturning、@AfterThrowing、@After这四个注解替代,同时在注解中定义要增强那个包中那个类的那个方法,且使用表达式表示。
5.在beans.xml中配置注解的扫描,同时配置开启aop注解的支持。
6.在测试类中测试注解配置的操作是否生效。