zoukankan      html  css  js  c++  java
  • 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配置

  • 相关阅读:
    myeclise中创建maven web程序
    java定时任务调度工具
    fastjson常用方法
    log4j2的配置及使用
    spring事务配置
    java利用poi解析excel文件
    ScheduledTheadPool线程池的使用
    ThreadPoolExecutor线程池
    jQuery属性操作(一)
    jQuery队列(三)
  • 原文地址:https://www.cnblogs.com/Booker808-java/p/7855672.html
Copyright © 2011-2022 走看看