Spring AOP

SpringAOP

Spring AOP
AOP指的是“面向切面的编程”。

AOP并不是Spring框架的特征,只不过Spring提供了很好的支持,使得AOP更易于实现。

在使用Spring AOP之前,需要添加AOP相关的依赖:

aspectj aspectjweaver 1.5.4 aspectj aspectjtools 1.5.4 接下来,需要创建cn.tedu.store.aop.TimeElapsedAspect切面类,该切面类的对象将由Spring框架进行管理,所以,必须在cn.tedu.store包下,并且,需要添加@Component和@Aspect注解:

@Component
@Aspect
public class TimeElapsedAspect {

}
然后,在类中添加切面方法,关于切面方法:

应该使用public权限;

可以使用void作为返回值类型,如果是@Around必须使用Object作为返回值类型;

方法名称可以自由定义;

参数根据切面的作用范围来决定,例如使用@Around时必须添加ProceedingJoinPoint参数。

所以,在切面类中添加切面方法:

public void process(ProceedingJoinPoint pjp) throws Throwable {
// 记录起始时间
long start = System.currentTimeMillis();

// 执行任务
pjp.proceed();

// 记录结束时间
long end = System.currentTimeMillis();

// 统计耗时
System.err.println("耗时:" + (end - start) + "ms.");

}
最后,还应该确定该切面方法的作用范围,即何时、哪些处理流程中,需要应用这个切面!

根据作用范围,可以使用@Before、@After,或使用@Around表示在应用的方法之前和之后都需要执行某些任务。

然后,还需要在@Around注解中配置参数,以决定切面应用于哪里,例如:

@Around(“execution(* cn.tedu.store.service.impl..(…))”)
以上表达式表示将切面应用于cn.tedu.store.service.impl包下所有的类中的所有方法!

至此,对于应用范围之内所有返回值类型为void的业务方法都可以正常应用切面,如果需要保证其它业务方法也能正常运行,则需要获取方法执行时的返回值,例如:

// 执行任务
Object obj = pjp.proceed();
并且,整个切面方法也需要将返回值类型设置为Object,并在方法运行结束之前返回以上结果。

使用@Before表示切面将存于某位置之前,使用@After表示切面将存在于某位置之后,通常,使用@Around可以完全取代@Before或@After!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值