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/>
                    
                
                
            
        
浙公网安备 33010602011771号