Spring核心思想之 AOP:基础概念及注解式AOP初体验

  对AOP的理解开始是抽象的,看到切点的匹配方式其实与正则表达式性质大致一样就基本了解AOP是基本是个什么作用了。只是整个概念更抽象,需要具化理解。下图列表是AOP相关概念解释,可能也比较抽象^_^

    1)连接点joinPoint:每个service方法的特色时机点都是连接点,是候选点之一。本质是一个关注点的模块化,这个关注点可能会横切多个对象。

    2)切入点PointCut:用户定位真正感兴趣的方法。

    3)增强通知Advice:横切逻辑+方位信息(具体哪种连接点),可以有前置、后置、返回后、环绕、异常增强类型。

    4)目标对象target:

    5)代理对象Proxy:它指的是⼀个类被AOP织⼊增强后,产⽣的代理类即代理对象。

    6)织入Weaving:它指的是把增强应⽤到⽬标对象来创建新的代理对象的过程。spring采⽤动态代 理织⼊,⽽AspectJ采⽤编译期织⼊和类装载期织⼊。

    7)切面Aspect:切面=切入点+增强=切入点+横切逻辑+方位信息。

    个人想象理解AOP:一个正在运行中的项目类似于长江中奔腾的江水,现在要在中间架桥()。AOP的作用就是定位哪个方位,怎么架桥,根据条件架几座桥,是大桥还是小桥。

   比如:一个log日志针对系统中的某个特定接口方法,这个方法在系统中广泛实现。如果每个实现的方法都自己添加这个log,那不仅增加开发难度,后续维护的工作量会更复杂。那么AOP切面编程就是一个相当契合的解决方法,一个开发维护也方便。

   xml配置示例:

                

  图中每个关于aop的属性都很重要也好理解,对pointcut中方法进行printLog方法增强。这个方法在切面id为logUtil中。

  实际切点pointcut个人理解本质就是一个正则表达式,了解Spring如何解析这个表达式就可以准确写出想要的系统效果。在Spring 配置概述 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中简单介绍了AOP相关的注解配置,下面简单示例:

    1)添加Spring AOP支持及AspectJ依赖

                

    2)使用方法规则拦截(等价的两种写法)

      Bean定义:

                

       Aspect定义:

                

      测试方法:

                

       测试结果:

                

    3)使用自定义注解类拦截

      自定义拦截注解@Action注解:

                

      被拦截类:

                

      Aspect类定义:

                

       测试结果:

                

     综合配置类:

                    

posted on 2021-11-15 14:17  池塘里洗澡的鸭子  阅读(60)  评论(0编辑  收藏  举报