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配置

spring框架中AOP思想与各种配置详解的更多相关文章

  1. Spring 框架中注释驱动的事件监听器详解

    事件交互已经成为很多应用程序不可或缺的一部分,Spring框架提供了一个完整的基础设施来处理瞬时事件.下面我们来看看Spring 4.2框架中基于注释驱动的事件监听器. 1.早期的方式 在早期,组件要 ...

  2. spring基于通用Dao的多数据源配置详解【ds1】

    spring基于通用Dao的多数据源配置详解 有时候在一个项目中会连接多个数据库,需要在spring中配置多个数据源,最近就遇到了这个问题,由于我的项目之前是基于通用Dao的,配置的时候问题不断,这种 ...

  3. Spring框架中的定时器 使用和配置

    Spring框架中的定时器 如何使用和配置 转载自:<Spring框架中的定时器 如何使用和配置>https://www.cnblogs.com/longqingyang/p/554543 ...

  4. SpringMVC 框架系列之组件概述与配置详解

    在上一篇文章 SpringMVC 框架系列之初识与入门实例 的实例中,我们已经知道,SpringMVC 框架是一个 web 层的框架,本篇文章就详细解释一下 SpringMVC 框架具体文件的配置以及 ...

  5. Spring 4.2框架中注释驱动的事件监听器详解

    事件交互已经成为很多应用程序不可或缺的一部分,spring框架提供了一个完整的基础设施来处理瞬时事件.下面我们来看看Spring 4.2框架中基于注释驱动的事件监听器. 1.早期的方式 在早期,组件要 ...

  6. 从Spring到SpringBoot构建WEB MVC核心配置详解

    目录 理解Spring WEB MVC架构的演变 认识Spring WEB MVC 传统时代的Spring WEB MVC 新时代Spring WEB MVC SpringBoot简化WEB MVC开 ...

  7. SpringBoot + Spring Security 基本使用及个性化登录配置详解

    Spring Security 基本介绍 这里就不对Spring Security进行过多的介绍了,具体的可以参考官方文档 我就只说下SpringSecurity核心功能: 认证(你是谁) 授权(你能 ...

  8. Spring之旅第四篇-注解配置详解

    一.引言 最近因为找工作,导致很长时间没有更新,找工作的时候你会明白浪费的时间后面都是要还的,现在的每一点努力,将来也会给你回报的,但行好事,莫问前程!努力总不会有错的. 上一篇Spring的配置博客 ...

  9. Spring MVC配置文件的三个常用配置详解

    转自:http://www.cnblogs.com/benwu/articles/5162614.html Spring MVC项目中通常会有二个配置文件,sprng-servlet.xml和appl ...

随机推荐

  1. 使用curl访问https

    在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具.它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具.然而在使用cr ...

  2. bzoj 3837 pa2013 Filary

    bzoj 先搞第一问.考虑简单情况,如果\(m=2\),那么一定有个剩余类大小\(\ge \lceil\frac{n}{2}\rceil\),同时这也是答案下界 然后我们每次随机选出一个数\(a_i\ ...

  3. VMWare中CentOS7 设置固定IP且能够访问外网

    最近搭建kubernetes集群环境时遇到一个问题,CentOS7在重启后IP发生变化导致集群中etcd服务无法启动后集群环境变得不可用,针对这种情况,必须要对CentOS7设置固定IP且可以访问外网 ...

  4. mongo启动报错问题处理

    关键错误信息child process failed, exited with error number 100 这是服务器断电导致数据库意外关闭导致的问题,处理方法也比较简单 rm -rf /var ...

  5. Java入门指南-03 操作符与表达式

    一.赋值操作符 在 Java 语言里,等号称为赋值操作符.例:a = b + 100;注意,不要把 Java 语言理解为数学.在 Java 里,这个等号的作用是“赋值”,即右侧的值赋给左边的变量. 要 ...

  6. Linux硬件访问技术

    在Linux系统中,无论是内核程序还是应用程序,都只能使用虚拟地址,而芯片手册中给出的硬件寄存器地址或者RAM地址则是物理地址,无法直接使用,因此,我们读写寄存器的第1步就是将将它的物理地址映射为虚拟 ...

  7. Java 和JavaScript实现C#中的String.format效果

    1.Java实现      /**      * 需要引入com.alibaba.fastjson.1.2.8     * String result2=HuaatUtil.format(templa ...

  8. list实现栈以及队列操作

    1.堆栈stack操作:尾进 尾出 或者叫先进后出 //1借助LinkedList 类中的方法实现栈 public class MyStack { private LinkedList<Obje ...

  9. CSS三角的写法(兼容IE6)

    目录 简介 优点 原理 1. 先创建一个div 2. 然后给div设定边框. 3. 给div的四个边框都设置不同的颜色 4. 把宽度和高度都变成0 5. 其余角为透明 6. 兼容IE6浏览器 造成这样 ...

  10. LOJ-6284-数列分块入门8

    链接: https://loj.ac/problem/6284 题意: 给出一个长为 的数列,以及 个操作,操作涉及区间询问等于一个数 的元素,并将这个区间的所有元素改为 . 思路: 维护一个分块是否 ...