Spring 第四章 面向切面的Spring

概念

AOP概念

  • 通知
    需要通过AOP添加的功能称为通知。

  • 连接点
    AOP可以应用到任意方法上,所以项目中所有的方法都可以作为连接点使用。

  • 切点
    通知可以应用到所有连接点,也可以通过匹配规则应用到部分连接点。经过筛选的连接点结果集称为切点。

  • 切面
    切面是通知和切点的结合。通知和切点共同定义了切面的全部内容——它是什么,在何时,在何处完成其功能。

      *通知包含了需要用于多个应用对象的横切行为,连接点是程序执行过程中能够应用通知的所有点,切点定义了通知被应用的具体位置(切点定义了那些连接点会得到通知)。*
    

AOP的两种实现方式

  • 注解形式
    优点:配置少
    缺点:需要源代码,不能对jar中的类进行修改。
  • XML配置形式
    优点:不需要源代码,可以对jar中的类进行修改。
    缺点:配置多

AOP的两种实现形式

  • 引入
    引入允许我们向现有的类添加新方法或属性
  • 织入
    织入是把切面应用到目标对象并创建新的代理对象的过程,织入点如下:
    • 编译器:切面在目标类编译时被织入。
    • 类加载器:切面在目标类加载到JVM时被织入。
    • 运行期:切面在应用运行的某个时刻被织入。

Spring对AOP的支持

  • 基于代理的经典Spring AOP;(过时)
  • 纯POJO切面
  • @AspectJ注解驱动的切面;
  • 注入式AspctJ切面;

关键知识点

  • Spring通知是Java编写的
  • Spring在运行时通知对象
  • Spring只支持方法级别的连接点

织入式AOP

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

通知的类型

  • 前置通知:在目标方法执行前调用通知功能;
  • 后置通知:在目标方法执行后调用通知功能;
  • 返回通知:在目标方法成功执行后调用通知功能;
  • 异常通知:在目标方法发生异常后调用通知功能;
  • 环绕通知:在目标方法调用之前和调用之后执行通知功能;
注解通知
@After通知方法会在目标方法返回或者抛出异常后调用
@AfterReutrning通知方法会在目标方法返回后调用
@AfterThrowing通知方法会在目标方法抛出异常后调用
@Around环绕通知 通知方法会将目标方法封装起来
@Before通知方法会在目标方法调用之前执行

切点

切点类型

在Spring AOP中,要使用AspectJ的切点表达式语言来定义切点。
Spring借助的(支持的)AspectJ的切点表达式语言来定义Spring切面

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

切点表达式

在这里插入图片描述

切点逻辑关系

多个表达式之间使用 and(&&) 、or(||)、not(!)操作符编写关系复杂的表达式
在这里插入图片描述

代码实例

Spring 织入式AOP 实例

引入式AOP

表达式

@DeclareParents( value=“cn.com.chujie.spring.springaop.performance+” , defaultImpl = cn.com.chujie.spring.springaop.DefaultEncoreable.class )
public static Encoreable encoreable;

  • value 属性用于制定切点匹配规则,+号表示子类而不是本身。
  • defaultImpl 属性用于指定引入功能的实现类
  • @DeclareParents注解所标注的静态属性指明要引入的接口。

代码实例

Spring 引入式AOP 实例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值