Spring AOP用法

时间:2016-04-01 06:49:38

标签: spring logging aop spring-aop

我正在考虑将所有Slf4j日志记录移动到Spring AOP中。 但是现在我对如何在以下场景中使用Spring AOP有一些疑问。 我可以看到我们可以使用它来打印常规方法跟踪日志和一些参数。 让我们说这样的情况。

public void methodTest(User object) {
    Integer number = object.getValue();
    List<Param> params = object.getParams();
    if((number == null || number < 1000 || number > 10000)) {
            LOGGER.error("Invalid Number- " + number);
            //May not throw below exception. Just want to log and continue.  
            //throw new Exception(ErrorCode.INVALID_USER_NUMBER); 

        } else if (number == 10000) {
            if(params != null && params.size() > 0) {
                LOGGER.error("No params supported for number "+number);
                throw new Exception(ErrorCode.INVALID_SCALE);
            }
            return;
        }

        if(number >= 1000 && number < 10000 && (params == null || params.size() == 0)) {
            LOGGER.error("Not all params available");
            throw new Exception(ErrorCode.INVALID_PARAM);
        }

}

在这种情况下,我们如何调整Spring AOP?我有不同的日志语句和值来打印基于不同的逻辑。

更新:根据ErrorCode编写我们的日志语句我们在Aspect中收到的内容看起来不错? 如果我们在很少的场景中有相同的错误代码,那么日志语句可能会有所不同。是否有可能处理这个问题? 最后,如果我根据不同的条件使用调试语句,而不是错误方案,我们是否在Aspect中获得控件?

1 个答案:

答案 0 :(得分:0)

创建一个Aspect类,在其中定义所有切入点和建议:

    @Aspect
    @Component
    public class Foo {     
      @Pointcut("execution(* com.example.ClassName.methodName(..))")
      private void exampleMethod() {}

      @Before("exampleMethod()")
      public void exampleAdvice() {
        //your logging implementation
      }
   }

在这里您可以找到更多示例: https://javamondays.com/spring-aop-beginners-guide/