我有一个带有一些 REST 控制器、服务类和帮助程序类的 Spring Boot 应用程序。控制器和服务类是 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() {
}
}
- 当调用控制器时,启用方面的日志记录适用于控制器和服务功能,但不适用于帮助程序功能。
- 如果我们在控制器中自动装配帮助程序类,非静态帮助程序方法将开始显示aspectj 日志。但是,静态帮助器方法仍然不显示aspectj日志
问题,
1.我们如何为非spring管理的类(即没有@Bean、@Autowired、@Component等)配置aspectj建议。
2.我们如何为静态方法配置aspectj建议(我正在使用@EnableLoadTimeWeaving但也许我遗漏了一些东西)
3.如果可能的话,AspectJ配置应该基于java
如果需要更多详细信息,请告诉我
Use -javaagent:/path/to/aspectjweaver-<version>.jar
作为 JVM 的启动参数以启用加载时编织。消除@EnableAspectJAutoProxy
从你的 spring 配置中,这样 spring 就不会尝试使用它自己的 Spring AOP 框架而不是纯 AspectJ。 (可选)创建META-INF/aop.xml
. Add @EnableSpringConfigured
如果你想将 spring 配置应用于不受 spring 管理的 bean (@Configurable
POJOs).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)