zoukankan      html  css  js  c++  java
  • 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时可以在方法中进行一些切面的处理。

    
    
    
    
    
    
  • 相关阅读:
    Anagram
    HDU 1205 吃糖果(鸽巢原理)
    Codeforces 1243D 0-1 MST(补图的连通图数量)
    Codeforces 1243C Tile Painting(素数)
    Codeforces 1243B2 Character Swap (Hard Version)
    Codeforces 1243B1 Character Swap (Easy Version)
    Codeforces 1243A Maximum Square
    Codeforces 1272E Nearest Opposite Parity(BFS)
    Codeforces 1272D Remove One Element
    Codeforces 1272C Yet Another Broken Keyboard
  • 原文地址:https://www.cnblogs.com/changyuyao/p/13177559.html
Copyright © 2011-2022 走看看