使用spring aop实现。
package com.ganlong.aspect;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
@Component
@Aspect
public class TimeAspect {
@Around("execution(* com.ganlong.controller.Hello.*(..))")
public Object around(ProceedingJoinPoint point) {
System.out.println("aspect start");
Object[] args=point.getArgs();
for (Object object : args) {
System.out.println("arg="+object);
}
Object obj=null;
try {
obj=point.proceed();
System.out.println(obj);
} catch (Throwable e) {
e.printStackTrace();
}
System.out.println("aspect end");
return obj;
}
}
在方法的什么时间段执行增强方法有5种类型
1)前置通知(Before):在目标方法被调用之前调用通知功能。
2)后置通知(After):在目标方法完成之后调用通知,不会关心方法的输出是什么。
3)返回通知(After-returning): 在目标方法成功执行之后调用通知。
4)异常通知(After-throwing):在目标方法抛出异常后调用通知。
5)环绕通知(Around):通知包裹了被通知的方法,在被通知的方法调用之前和之后执行自定义的行为。

网友评论