【第六章】 AOP 之 6.8 切面实例化模型 ——跟我学spring3
2016-01-08 11:46
363 查看
所谓切面实例化模型指何时实例化切面。
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 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。
相关文章推荐
- java.lang.IllegalStateException: The specified child already has a parent. You must call removeView(
- java 拦截器、过滤器、监听器 (转载,自己学习)
- (java)Maximum Subarray
- java根据层次遍历建立二叉树
- Java 面向对象理解
- java多线程实例
- java过滤器(转载)自己学习
- 配置SpringMVC返回JSON遇到的坑
- java中super()和this()浅析
- maven的坑: Exception in thread "pool-1-thread-1" java.lang.NoClassDefFoundError: org/eclipse/aether/spi/connector/Transfer$State
- (java)Jump Game II
- 【第六章】 AOP 之 6.7 通知顺序 ——跟我学spring3
- 浅谈java内存泄漏
- JAVA访问数据库之增删改查(CRUD)
- 【第六章】 AOP 之 6.6 通知参数 ——跟我学spring3
- java环境配置
- java.lang.OutOfMemoryError:GC overhead limit exceeded填坑心得
- 从头认识java-17.2 基本的线程机制(1)-初识多线程-1
- springboot 构建微服务设置远程调试
- JAVA线程锁lock下Condition高级使用-多个Condition的整合使用