spring之AOP详解

AOP(Aspect-OrientedProgramming,面向切面编程)

总的来说,开发过程中会有很多与具体业务无关的代码,如日志代码等。任何一个功能模块都将产生日志,代码的重复出现,导致日志一旦发生变化,多个模块就要进行大量的修改工作,可想而知,重复性的工作是很多的。因此AOP针对这一现象进行了很好的解决,将与业务无关的代码抽取出来进行了封装(切面)。

AOP的基本概念

  • (1)Aspect(切面):通常是一个类,里面可以定义切入点和通知
  • (2)JointPoint(连接点):程序执行过程中明确的点,一般是方法的调用
  • (3)Advice(通知):AOP在特定的切入点上执行的增强处理,有before,after,afterReturning,afterThrowing,around
  • (4)Pointcut(切入点):就是带有通知的连接点,在程序中主要体现为书写切入点表达式
  • (5)AOP代理:AOP框架创建的对象,代理就是目标对象的加强。Spring中的AOP代理可以使JDK动态代理,也可以是CGLIB代理,前者基于接口,后者基于子类

上面说过日志在AOP中的使用情况;实际开发中也会有其他的情况,比如人的信息查询,以列表的方式返回,通过使用AOP可以很好的脱敏处理(身份证号隐藏几位,保护其隐私)。

通知方法:

  1. 前置通知:在我们执行目标方法之前运行(@Before)
  2. 后置通知:在我们目标方法运行结束之后 ,不管有没有异常(@After)
  3. 返回通知:在我们的目标方法正常返回值后运行(@AfterReturning)
  4. 异常通知:在我们的目标方法出现异常后运行(@AfterThrowing)
  5. 环绕通知:动态代理, 需要手动执行joinPoint.procced()(其实就是执行我们的目标方法执行之前相当于前置通知, 执行之后就相当于我们后置通知(@Around)

因spring MVC和Spring是无缝的,现大多数使用springboot,简化了一些配置;SpringMVC是方法级别的拦截,一个方法对应一个Request上下文,所以方法直接基本上是独立的,独享request,response数据。在使用@Aspect时可以在方法中进行一些切面的处理。




原文地址:https://www.cnblogs.com/changyuyao/p/13177559.html