• spring框架中AOP思想与各种配置详解


    Spring中提供两种AOP支持:

      1.基于代理的经典AOP

      2.Aspectj注解配置AOP

      

      首先我们先了解什么是AOP,AOP(Aspect Oriented Programming)面向切面编程!AOP采用了横向抽取机制(可能有人会说啥叫横向抽取机制,在这里先引入一个纵向继承的概念),取代了纵向继承的重复性代码(例如权限控制、性能监视、缓存)

      spring AOP使用纯Java实现,主要通过代理方式向目标类(被代理的类织入增强代码)

      Aspectj 是一个基于Java语言的AOP框架

      纵向继承

                                         在图中,左边的传统的纵向继承方式,因为writelog在具体实现类userdao中无法被复用,所以此方法就被放到了所有的dao的父类BaseDao中

                                         多态的特性,所有子类dao要加强代码时,经过父类的writelog方法,类似一种从上到下的关系;然而右边的是AOP思想下的代码增强,因为不

                                         论是代理类UserDaoProxy,还是被代理类UserDao,都实现了同一个接口或是同一个父类,属于兄弟关系,实现了所谓的“横向”的切入机制!

    而对于AOP中的一些术语,我觉得你们需要了解一下,以便于对下面的阅读有帮助!

    针对这个图再补充一下,一个切点和一个advice的组合叫advisor!!

    (1) 基于代理的经典AOP

      通知:advice

      Spring提供了 前置通知、环绕通知、后置通知、异常通知等等。

      这些advice分别对应要实现的接口:MethodBeforeAdvice、MethodInteceptor、AfterReturningAdvice、ThrowsAdvice

      就拿前置通知来举例子:

                

     这是在xml中的各个类的配置

          

       但其实你们会发现,我这里的advice没有指定要对哪个方法执行增强,因为dao可能会有好几种方法,但是有些并不需要增强,所以一,我们就需要一个带有特定切点的advice

    基于以上的配置进行修改,带有切点的切面!!

      

      一个切点和一个advice的组合:advisor

      带有切点的切面,只需要在以上配置中再加一个:

          之后在配置代理类时,把interceptorname换位这个带有切点的切面id

       但是有没有发现前面的配置中,每一步生成代理类时,都需要主动去配置proxyFactoryBean来生成代理类,这样做很麻烦,所以这里又要引入自动代理的概念!!

            

             

              

          (2) Aspectj配置AOP(推荐使用)

         

        2.1基于Aspectj注解形式

        第一步:引入相应的jar包

          

         第二步:以Aspectj形式编写

         

         第三步:创建xml文档:

         

       2.2基于Aspectj的xml形式配置

         这是以xml形式编写的aspect配置

  • 相关阅读:
    php网站请求返回结果被加入恶意代码片段
    php tp5 的index.php 被改成首页静态页面内容
    gitee https 方式每次都要输入密码的解决
    linux 下 php执行 exec 无反应 返回值为空
    layerconfirm 右上角关闭事件等于按钮2
    微信小程序公共方法创建与调用
    php curl 转为 x-www-form-urlencoded 方式
    php 加载 zip 文件
    小程序语音播报
    mysql命令行操作-将查询结果导出到文件
  • 原文地址:https://www.cnblogs.com/Booker808-java/p/7855672.html
Copyright © 2020-2023  润新知