(一)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. 笨办法学Python (exercise1-15)

    #exercise1print "Hello world!"print "Hello Again"print "I like typing this. ...

  2. kxbdSuperMarquee.js滚动的神器-推荐

    http://code.ciaoca.com/jquery/kxbdmarquee/ 版本:jQuery v1.3.2+ 查看 Demo 下载 jQuery kxbdMarquee 文档目录 使用方法 ...

  3. PDO和PDOStatement类常用方法

    PDO — PDO 类 PDO::beginTransaction — 启动一个事务 PDO::commit — 提交一个事务 PDO::__construct — 创建一个表示数据库连接的 PDO ...

  4. 【目录】python

    python 入门学习(一) 入门学习(二) 入门学习(三) 入门学习(四) 入门学习(五) 入门学习(六) 入门学习(七) 入门学习(八) 入门学习(九) 入门学习(十) Head First Py ...

  5. 搭建Git服务器

    在远程仓库一节中,我们讲了远程仓库实际上和本地仓库没啥不同,纯粹为了7x24小时开机并交换大家的修改. GitHub就是一个免费托管开源代码的远程仓库.但是对于某些视源代码如生命的商业公司来说,既不想 ...

  6. html中的a标签(超链接)的使用

    a标签即超链接,用于从一张页面链接到另一张页面.其最重要的属性是href属性,它指示链接的目标. 例如: <a href="http://www.baidu.com/"> ...

  7. js实现判断大写锁定是否开启(转)

    转载地址:http://www.cnblogs.com/xiaoao808/archive/2008/07/31/1257624.html 在用户登录输入密码时,常常会有因为大写锁定开启而造成输入密码 ...

  8. 根据google地图抓去全国信息- 抓去全国小区以及新建楼盘信息

    本案例由于google每天每个账户能post20000次所以我们需要相对较长的时间来抓去google的数据信息. 主要思路:通过一定的zoom一个相对较大的zoom.我们尽可能的搜索我们的所有数据. ...

  9. 如何使用scikit—learn处理文本数据

    答案在这里:http://www.tuicool.com/articles/U3uiiu http://scikit-learn.org/stable/modules/feature_extracti ...

  10. Java基础知识点1:基本类型包装类

    基本类型的包装类 简介 通常来说我们在程序中经常会使用元类型,比如 int data = 1; float data = 2.1F; 但是在有些场景中不能直接使用元类型,比如如果我们想要建立一个int ...