慕课网,spring入门,第5章Spring AOP基本概念
https://www.imooc.com/video/4032
AOP概念
AOP:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
主要功能:日志记录,性能统计,安全控制,事物管理,异常处理等。
所有基于配置文件的aspect,只支持单例模式。
实现方式
- 预编译,AspectJ
- 运行期动态代理(jdk动态代理,CGLib动态代理),具体实现有SpringAOP、JBossAOP
几个概念
官方文档中的概念
advice的类型
官方文档说明
有接口和无接口的spring aop的实现区别
- spring aop默认使用标准的java se动态代理作为aop代理,使得任何接口都可以被代理。
- spring aop也可以使用CGLIB代理(如果一个业务对象没有实现任何接口)。
基于配置的aop的实现
spring所有的切面和通知器都必须放在一个<aop:config>内(每个配置可以包含多个<aop:config>元素),每个<aop:config>可以包含pointcut、advisor、aspect元素(必须按照这个顺序声明)
pointcut
切点类型说明
只有spring aop支持的
@开头表示按注解匹配的
配置aop
- 前置通知的两种配置方式,一是在通知外先声明切点,每个通知使用时直接引用;二是在通知内部声明切点,则该切点不能被其他通知使用。
- 返回通知的两种配置方式
- 抛出异常通知
- 后置通知,不论方法正常执行返回还是抛出异常,都知执行这个通知,
- 环绕通知
- 执行顺序
当存在多个通知时,执行顺序如下
前置通知->环绕通知执行前的代码->(目标对象方法)->环绕通知执行后的代码->后置通知->正常返回通知/抛出异常通知
- 为通知传递参数
如下,只匹配指定方法、指定参数类型和参数名称的切点
Introductions
- 简介允许一个切面声明一个实现指定接口的通知对象,并提供了一个接口实现类代表这些对象。
- 由<aop:aspect>中的<aop:declare-parents>元素声明。该元素用于声明所有匹配的类型拥有一个新的parent。
如下图,types-matching匹配biz包下任意类的,为这些类指定实现接口Fit,指定Fit接口默认实现类FitImpl。types-matching匹配上的对象aspectBiz,会被添加上实现Fit接口,因此可以强制类型转换为接口类型,然后即可调用接口的方法。
基于配置文件的切面只支持单例模式
advisor
- advisor就像一个小的自包含的切面,只有一个advice。
- 切面自身通过一个bean表示,并且必须实现某个advice接口,同时,advisor也可以很好地利用AspectJ的切入点表达式。
- spring中通过配置文件中<aop:advisor>元素支持advisor。实际使用中,多数情况下它会和transactional advice配合使用。
- 为了定义一个advisor的优先级,以便让advice有序,可以使用order属性来定义advisor的顺序。