(一)Aop术语定义

1.通知(advice)

通知定义了切面要做什么工作,即调用的方法,同时定义了什么时候做这些工作,即以下五种类型

(1)前置通知(Before) :在目标方法调用之前执行切面方法

(2)后置通知(After) :在目标方法调用之后执行切面方法,不关心目标方法的返回值以及是否抛出异常,类似于finally

(3)返回通知(After-returning): 在目标方法正常执行不抛出异常的情况下执行切面方法

(4)异常通知(After-throwing) :在目标方法发生异常的情况下执行切面方法

(5)环绕通知(Around) :切面方法包裹了目标方法,在目标方法之前和之后执行自定义的切面方法调用流程。

2.连接点

即可以插入切面方法到应用的正常流程之中的点

3.切点

即通知真正插入应用程序的时机

4.切面

通知和切点组合而成,即定义了做什么,何时做,在哪里做的一个封装类

5.引入

允许我们向现用的类添加新的方法或属性

6.织入

把切面应用到目标对象并创建新的代理对象的过程

Spring支持四种类型的AOP:基于代理的经典SpringAop(配置过于复杂繁琐,淘汰)    纯POJO切面  @AspectJ注解驱动的切面   注入式AspectJ切面(适用于Spring各版本)

(二)切点的写法(通过Aspectj的切点表达式语言定义)

(1)目前支持的切点表达式语言指示器

 Aspectj指示器 描述
arg() 限制连接点匹配参数为指定类型的执行方法
@args() 限制连接点匹配参数由指定注解标注的执行方法
execution() 用于匹配是连接点的执行方法
this() 限制连接点匹配AOP代理的bean引用为指定类型的类
target() 限制连接点匹配目标对象为指定的类
@target() 限制连接点匹配特定的执行对象、这些对象对应的类要具有指定类型的注解
within() 限制连接点匹配指定的类型
@within() 限制连接点匹配指定注解所标注的类型(当使用spring aop时,方法定义在由指定的注解所标注的类里)
@annotation 限定匹配带有指定注解的连接点

只有exection()指示器是执行匹配的,其他都是用来限制匹配的

示例

execution(* springtest.perform.perform(..))

* 表示任意返回类型

springtest.perform.perform()表示springtest包下perform类中perform方法,..表示任意参数类型

在java文件配置中,指示器之间用&&,||连接

execution(* springtest.perform.perform(..)) && bean('test')

在xml文件配置中,&& ||用and  or 代替

(三)使用注解创建切面

如上所示就是一个注解切面的定义方式,但是要使用上面的切面,还需要在spring中将他配置为一个bean,同时启动spring的自动代理功能,否则要么在spring上下文中没有这个bean,要么

只是作为一个普通的bean,spring不会将其视为切面,也不会为他转换为切面代理

到此上述切面就能正常使用了

(四)使用注解切面给现有类添加新的方法

给现有的类引入新的方法,我个人认为就是给现有类实现新的接口,同时给予他新接口的实现。如现有

表演接口以及他的实现类

此时,我想要给表演者的实现添加计数的功能,及记录他总共表演了多少次,同时又不想改变现有类的结构,此时就可以使用AOP的引用,如有一个新的表演计数接口以及他的实现类

若要讲上述实现类的功能引入到表演者类中,我们可以创建一个引入切面

 此时,如果你用instanceof  PerformCount 测试perform的实例会发现结果为true,表明,perform的实例实现了performCount接口,引入成功,即

perform也是performCount的实现类,同时调用新接口的方法时,实现是引入的实现类的方法

(五)使用XML配置也能实现上述全部功能

Spring-Aop入门的更多相关文章

  1. Spring AOP入门——概念和注意事项

    AOP什么? AOP在功能方面,它是之前和之后运行一些业务逻辑,一些操作(比方记录日志.或者是推断是否有权限等),这些操作的加入.全然不耦合于原来的业务逻辑.从而对原有业务逻辑全然是透明. 也就是说. ...

  2. Spring AOP 入门实例详解

    目录 AOP概念 AOP核心概念 Spring对AOP的支持 基于Spring的AOP简单实现 基于Spring的AOP使用其他细节 AOP概念 AOP(Aspect Oriented Program ...

  3. 基于注解的Spring AOP入门、增强Advice实例

    这篇文章简单通过一个例子,介绍几种增强的基本配置,以方便spring框架初学者对aop的代码结构有个清楚的了解认识.首先,spring支持aop编程,支持aspectJ的语法格式来表示切入点,切面,增 ...

  4. [Spring框架]Spring AOP基础入门总结二:Spring基于AspectJ的AOP的开发.

    前言: 在上一篇中: [Spring框架]Spring AOP基础入门总结一. 中 我们已经知道了一个Spring AOP程序是如何开发的, 在这里呢我们将基于AspectJ来进行AOP 的总结和学习 ...

  5. [Spring框架]Spring AOP基础入门总结一.

    前言:前面已经有两篇文章讲了Spring IOC/DI 以及 使用xml和注解两种方法开发的案例, 下面就来梳理一下Spring的另一核心AOP. 一, 什么是AOP 在软件业,AOP为Aspect ...

  6. Spring Boot 入门(五):集成 AOP 进行日志管理

    本篇文章是接着 Spring boot 入门(四):集成 Shiro 实现登陆认证和权限管理写的,按照前面几篇博客的教程,可以搭建一个简单的项目,主要包含了 Pagehelper+MyBatis 分页 ...

  7. Spring AOP初级——入门及简单应用

      在上一篇<关于日志打印的几点建议以及非最佳实践>的末尾提到了日志打印更为高级的一种方式——利用Spring AOP.在打印日志时,通常都会在业务逻辑代码中插入日志打印的语句,这实际上是 ...

  8. Spring入门(二)— IOC注解、Spring测试、AOP入门

    一.Spring整合Servlet背后的细节 1. 为什么要在web.xml中配置listener <listener> <listener-class>org.springf ...

  9. (转)使用Spring的注解方式实现AOP入门

    http://blog.csdn.net/yerenyuan_pku/article/details/52865330 首先在Eclipse中新建一个普通的Java Project,名称为spring ...

  10. Spring框架入门之AOP

    Spring框架入门之AOP 一.Spring AOP简单介绍 AOP AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented ...

随机推荐

  1. 编译PHP 报错:node.c: In function dom_canonicalization

    编译PHP 报错:node.c: In function dom_canonicalization  /opt/php-5.2.17/ext/dom/node.c:1953: error: deref ...

  2. js parseInt 显示0

    parseInt 有第二个参数, 就是进制参数 parseInt("08", 10);  //表示这个数字是十进制的就不会出错了.

  3. 整理iOS9适配中出现的坑(图文)

    原文: http://www.cnblogs.com/dsxniubility/p/4821184.html 整理iOS9适配中出现的坑(图文)   本文主要是说一些iOS9适配中出现的坑,如果只是要 ...

  4. 使用github pages, hexo搭建个人博客教程

    具体的原理性的东西就不说了直接上教程,怕等下自己忘了. 一. github 阶段 申请一个github 账号并成功登录进去. 创建一个名字为xxx.github.io的空项目. 二. hexo 阶段 ...

  5. Find All Numbers Disappeared in an Array

    Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and ot ...

  6. plist文件的读写

    参考资料 http://blog.csdn.net/totogo2010/article/details/7634185

  7. HDU 4113 Construct the Great Wall(插头dp)

    好久没做插头dp的样子,一开始以为这题是插头,状压,插头,状压,插头,状压,插头,状压,无限对又错. 昨天看到的这题. 百度之后发现没有人发题解,hust也没,hdu也没discuss...在acm- ...

  8. SQL表新增触发(触发器)

    ALTER TRIGGER [InsertStoreJITOnloadQuantity] ON [dbo].[Sourceing] After INSERT AS --登記計劃數量(新增時YN=0) ...

  9. Xcode 中的相对路径与绝对路径的相关设置

    近日闲来无事,与博客园中闲荡,忽至一烟霞照耀祥瑞蒸熏松竹翠秀奇花遍开的神奇之地.如此美景,令人心生向往,故而徜徉于其中不可自拔,独乐乐不如众乐乐: iOS开发之 相对路径与绝对路径 https://d ...

  10. checkbox实现互斥

    <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>标题页-学无忧(www.x ...