Spring AOP 排除一些类

标签 spring spring-aop spring-aspects

我正在使用 Spring AspectJ 记录方法执行统计信息,但是,我想在不更改切入点表达式的情况下从中排除一些类和方法。

为了排除某些方法,我创建了一个自定义注释,用于过滤掉。但是我无法对类(class)做同样的事情。

这是我的方面定义 -

@Around("execution(* com.foo.bar.web.controller.*.*(..)) "
            + "&& !@annotation(com.foo.bar.util.NoLogging)")
public Object log(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
    // logging logic here
}

NoLogging 是我用于排除方法的自定义注解。

那么如何在不更改切入点表达式和不添加新顾问的情况下过滤掉某些类?

最佳答案

好的,我找到了解决方案 - 使用 @target PCD(切入点指示符)过滤掉带有特定注释的类。在这种情况下,我已经有了 @NoLogging注释,所以我可以使用它。更新后的切入点表达式将变为如下 -

@Around("execution(* com.foo.bar.web.controller.*.*(..)) "
            + "&& !@annotation(com.foo.bar.util.NoLogging)" 
            + "&& !@target(com.foo.bar.util.NoLogging)")
public Object log(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
    // logging logic here
}

解释-

execution(* com.foo.bar.web.controller.*.*(..)) - c.f.b.w.controller中所有类的所有方法包

"&& !@annotation(com.foo.bar.util.NoLogging)" - 没有 @NoLogging注释

"&& !@target(com.foo.bar.util.NoLogging)" - 并且其类也没有 @NoLogging注释。

所以现在我只需添加 @NoLogging注释到我希望从方面中排除其方法的任何类。

更多 PCD 可以在 Spring AOP 文档中找到 - http://docs.spring.io/spring/docs/current/spring-framework-reference/html/aop.html#aop-pointcuts-designators

关于Spring AOP 排除一些类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38822971/

相关文章:

java - 如何定义aop :pointcut annotation in MultiActionController

spring-boot - 使用 Spring AOP 在 mongoDb 中存储新旧值

java - 如何在spring data jpa中基于动态查询检索/显示列名及其数据?

java - 如何使用Spring创建一个父接口(interface),其中包含子接口(interface)的一些注释?

java - 如何从 Spring Data REST 中的页面获取列表

java - 将 List<Object[]> 转换为 JSON

java - 启用 Spring AOP 时出现 BeanNotOfRequiredTypeException

java - 使用 ProxyFactoryBean 时出现异常

spring - 无法捕获 @AfterThrowing 建议中的 @Before 建议中引发的异常

java - Rest + Spring AOP + 接口(interface)不注入(inject)