4

我有一个带有一些 REST 控制器、服务类和助手类的 Spring Boot 应用程序。控制器和服务类是 spring 管理的,而 helper 类不是 spring 管理的,并且大部分包含静态方法。

AspectJ 配置存在于 java 配置中,如下所示

@Configuration
@EnableLoadTimeWeaving(aspectjWeaving = AspectJWeaving.ENABLED)
public class AspectConfig {

    @Bean
    public LoggingAspect loggingAspect() {
        return new LoggingAspect();
    }
}

对应的LoggingAspect类如下,

@Aspect
public class LoggingAspect {

    @Before("allMethodsPointcut()")
    public void logBeforeMethod(JoinPoint joinPoint) {
        System.out.println("Entering Method - " + joinPoint.getSignature().getDeclaringType() + "::" + joinPoint.getSignature().getName());
    }

    @After("allMethodsPointcut()")
    public void logAfterMethod(JoinPoint joinPoint) {
        System.out.println("Exiting Method - " + joinPoint.getSignature().getDeclaringType() + "::" + joinPoint.getSignature().getName());
    }

    @Pointcut("execution(* com.test.controller..*(..)) || execution(* com.test.service..*(..)) || execution(* com.test.helper..*(..))")
    public void allMethodsPointcut() {
    }
}
  • 调用控制器时,启用 Aspect 的日志记录适用于控制器和服务功能,但不适用于辅助功能。
  • 如果我们在控制器中自动装配辅助类,非静态辅助方法开始显示 aspectj 日志。但是,静态辅助方法仍然不显示 aspectj 日志

问题,1. 我们如何为非弹簧管理的类配置 aspectj 建议,即没有 @Bean、@Autowired、@Component 等。2. 我们如何为静态方法配置 aspectj 建议(我正在使用 @EnableLoadTimeWeaving 但也许我我错过了什么) 3. 如果可能的话,AspectJ 配置应该是基于 java 的

如果需要更多详细信息,请告诉我

4

1 回答 1

3

用作JVM-javaagent:/path/to/aspectjweaver-<version>.jar的启动参数以启用加载时编织。从您的 spring 配置中删除@EnableAspectJAutoProxy,以便 spring 不会尝试使用它自己的 Spring AOP 框架而不是纯 AspectJ。(可选)创建META-INF/aop.xml. @EnableSpringConfigured如果您想将 spring 配置应用于不是由 spring ( @ConfigurablePOJOs )管理的 bean,请添加。

于 2016-12-29T17:31:14.500 回答