spring-aop 的注释用法
一、书写增强有效代码
//切面注释
@Aspect
public class errorLogger {
private static Logger logger = Logger.getLogger(errorLogger.class);
// 设置切点注释
@Pointcut("execution(* com.small.server.*.*(..))")
// 切点
public void pointcut() {
}// 这样做更加简洁
// 前置增强注释
@Before("pointcut()")
// 一个参数而已
public void errorBefore(JoinPoint jp) {
logger.debug("调用" + jp.getTarget() + "的" + jp.getSignature().getName()
+ "方法,参数列表为:" + Arrays.toString(jp.getArgs()));
}
// 异常抛出异常注释
@AfterThrowing(pointcut = "pointcut()", throwing = "e")
public void errorThrowing(JoinPoint jp, RuntimeException e) {
logger.debug("调用" + jp.getTarget() + "的" + jp.getSignature().getName()
+ "方法,抛出异常" + e);
}
// 后置增强注释
@AfterReturning(pointcut = "pointcut()", returning = "result")
public void errorAfterReturning(JoinPoint jp, Object result) {
logger.debug("调用" + jp.getTarget() + "的" + jp.getSignature().getName()
+ "方法,返回值为:" + result);
}
// 最终增强注释
@After("pointcut()")
public void errorAfter(JoinPoint jp) {
logger.debug("调用" + jp.getTarget() + "的" + jp.getSignature().getName()
+ "方法结束");
}
//环绕增强
@Around("pointcut()")
public Object around(ProceedingJoinPoint jp)throws Throwable{
logger.debug("调用"+jp.getSignature().getName()+"方法,参数列表为:"+Arrays.toString(jp.getArgs()));
try{
Object result=jp.proceed();//获得返回值
logger.debug("调用"+jp.getTarget()+"的"+jp.getSignature().getName()+"方法,返回值为:"+result);
return result;
}catch(Throwable e){
logger.debug("调用"+jp.getTarget()+"的"+jp.getSignature().getName()+"方法,");
throw e;
}finally{
logger.debug("调用"+jp.getTarget()+"的"+jp.getSignature().getName()+"方法结束");
}
}
}
二、spring核心配置文件代码
<context:component-scan base-package="com.small.logger"/>
<bean class="com.small.logger.errorLogger"></bean>
<aop:aspectj-autoproxy/>