跟我学Spring3(6.8):切面实例化模型,spring36.8
跟我学Spring3(6.8):切面实例化模型,spring36.8
所谓切面实例化模型指何时实例化切面。
Spring AOP支持AspectJ的singleton、perthis、pertarget实例化模型(目前不支持percflow、percflowbelow 和pertypewithin)。
- singleton:即切面只会有一个实例;
- perthis:每个切入点表达式匹配的连接点对应的AOP对象都会创建一个新切面实例;
- pertarget:每个切入点表达式匹配的连接点对应的目标对象都会创建一个新的切面实例;
默认是singleton实例化模型,Schema风格只支持singleton实例化模型,而@AspectJ风格支持这三种实例化模型。
singleton:使用@Aspect()指定,即默认就是单例实例化模式,在此就不演示示例了。
perthis:每个切入点表达式匹配的连接点对应的AOP对象都会创建一个新的切面实例,使用@Aspect(“perthis(切入点表达式)”)指定切入点表达式;
如@Aspect(“perthis(this(cn.javass.spring.chapter6.service.IIntroductionService))”)将对每个匹配“this(cn.javass.spring.chapter6.service.IIntroductionService)”切入点表达式的AOP代理对象创建一个切面实例,注意“IIntroductionService”可能是引入接口。
pertarget:每个切入点表达式匹配的连接点对应的目标对象都会创建一个新的切面实例,使用@Aspect(“pertarget(切入点表达式)”)指定切入点表达式;
如@Aspect(“pertarget(target(cn.javass.spring.chapter6. service.IPointcutService))”)将对每个匹配“target(cn.javass.spring.chapter6.service. IPointcutService)”切入点表达式的目标对象创建一个切面,注意“IPointcutService”不可能是引入接口。
在进行切面定义时必须将切面scope定义为“prototype”,如“<bean class=”……Aspect” scope=”prototype”/>”,否则不能为每个匹配的连接点的目标对象或AOP代理对象创建一个切面。
示例请参考cn.javass.spring.chapter6. InstanceModelTest。
本系列:
- 跟我学 Spring 3(1): Spring 概述
- 跟我学 Spring 3(2.1):IoC 基础
- 跟我学Spring3(2.2):IoC容器基本原理
- 跟我学Spring3(2.3):IoC容器基本原理
- 跟我学Spring3(3.1):DI的配置使用
- 跟我学Spring3(3.2):DI之循环依赖
- 跟我学Spring3(3.3):更多的DI知识
- 跟我学Spring3(3.4):DI之Bean的作用域
- 跟我学Spring3(4.1):资源之基础知识
- 跟我学Spring3(4.2):内置Resources实现
- 跟我学Spring3(4.3):访问Resource
- 跟我学Spring3(4.4):Resource通配符路径
- 跟我学Spring3(5.1 & 5.2):Spring表达式语言之概述和SpEL基础
- 跟我学Spring3(5.3):Spring 表达式语言之 SpEL 语法
- 跟我学Spring3(5.4):在Bean定义中使用EL—跟我学spring3
- 跟我学Spring3(6.1):AOP的HelloWorld
- 跟我学Spring3(6.3):基于Schema的AOP
- 跟我学Spring3(6.5):AspectJ切入点语法详解
- 跟我学Spring3(6.6): 通知参数
- 跟我学Spring3(6.7): 通知顺序
- 跟我学Spring3(6.8):切面实例化模型
用户点评