我有一个带有一些 REST Controller 、服务类和帮助器类的 Spring Boot 应用程序。 Controller 和服务类是 spring 管理的,而助手类不是 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() {
}
}
问题,
1. 我们如何为非 spring 管理的类配置 aspectj 建议,即没有 @Bean、@Autowired、@Component 等。
2. 我们如何为静态方法配置 aspectj 建议(我正在使用 @EnableLoadTimeWeaving 但也许我遗漏了一些东西)
3. 如果可能,AspectJ 配置应该是基于 Java 的
如果需要更多详细信息,请告诉我
最佳答案
使用 -javaagent:/path/to/aspectjweaver-<version>.jar
作为 JVM 的启动参数以启用加载时编织。删除 @EnableAspectJAutoProxy
来自您的 spring 配置,以便 spring 不会尝试使用它自己的 Spring AOP 框架而不是纯 AspectJ。或者,创建 META-INF/aop.xml
.添加 @EnableSpringConfigured
如果要将 spring 配置应用于不受 spring 管理的 bean(@Configurable
POJO)。
关于spring - Spring 应用程序中非 Spring bean 的加载时间编织,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41383941/