AspectJ开发

AOP原理

在spring框架中,实现AOP的代理方法就是(之前Spring总结(下)中的第八和九)两种方法,当目标对象业务bean有实现接口方法时,使用AOP代理,当业务Bean没有实现接口时,会合适CGLIB方法来创建代理对象。此过程的判断及调用及由spring框架来实现。

AspectJ开发

AspectJ是一个基于java语言的AOP框架,它提供了强大的AOP功能。spring2.0后引入AspectJ框架,使用Aspectj实现AOP的两种方式:

  • 基于AspectJ的xml配置
  • 基于AspectJ的注解方式

基于AspectJ的xml配置

AOP的准备工作

  1. 导入jar包,包括基本的jar包,和开发aop的jar包、spring的基础包,spring-aop包及以下各包
  2. 导入aop的约束,在.xml中使用
    在这里插入图片描述

编写目标对象

在这里插入图片描述

编写切面

按照增强在目标类方法中的连接点位置,可以分为5种:

  1. 前置增强:org.springframework.aop.BeforeAdvice是前置增强顶层接口,因为Spring只支持方法的增强,其子接口MethodBeforeAdvice是目前可用的前置增强。表示在目标方法执行前实施增强。
  2. 后置增强:org.springframework.aop.AfterReturningAdvice是目前可用的后置增强,表示在目标方法执行后实施增强。
  3. 环绕增强:org.aopalliance.intercept.MethodInterceptor代表了环绕增强,表示在目标方法执行前后实施增强。直接使用了AOP联盟定义的接口。
  4. 异常抛出增强:org.springframework.aop.ThrowsAdvice代表了异常抛出增强,表示在目标方法抛出异常后实施增强。
  5. 引介增强:org.springframework.aop.IntroductionInterceptor代表引介增强,表示在目标类中添加一些新的方法和属性。
    在这里插入图片描述

配置xml

其中 execution 是用的最多的,其格式为:
	execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern)throws-pattern?)
	returning type pattern,name pattern, and parameters pattern是必须的.
	ret-type-pattern:可以为*表示任何返回值,全路径的类名等.
	name-pattern:指定方法名,*代表所以,set*,代表以set开头的所有方法.
	parameters pattern:指定方法参数(声明的类型),(..)代表所有参数,(*)代表一个参数,(*,String)代表第一个参数为任何值,第二个为String类型.
举例说明:
	任意公共方法的执行:
		execution(public * *(..))
	任何一个以“set”开始的方法的执行:
		execution(* set*(..))
		AccountService 接口的任意方法的执行:
		execution(* com.xyz.service.AccountService.*(..))
	定义在service包里的任意方法的执行:
		execution(* com.xyz.service.*.*(..))
	定义在service包和所有子包里的任意类的任意方法的执行:
		execution(* com.xyz.service..*.*(..))
	定义在pointcutexp包和所有子包里的JoinPointObjP2类的任意方法的执行:
		execution(* com.test.spring.aop.pointcutexp..JoinPointObjP2.*(..))")
	***> 最靠近(..)的为方法名,靠近.*(..))的为类名或者接口名,如上例的JoinPointObjP2.*(..))

在这里插入图片描述
测试
在这里插入图片描述
在这里插入图片描述

基于AspectJ的注解方式

开户aop功能

在这里插入图片描述

为增强类添加注解

在这里插入图片描述

添加增强方法

在这里插入图片描述

测试

在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值