因此,我需要在我的Spring Boot项目中使用AspectJ织入:
@Configuration
@EnableAspectJAutoProxy
public class ApiConfiguration implements WebMvcConfigurer { /*...*/ }
我需要捕获一个
@Service
的 私有方法 的执行:package net.space.service;
// imports
@Service
public class RepositoryService {
private void privateMethod(String param) {
/* Do something */
}
public void innerCaller() {
this.privateMethod(null);
}
}
重要提示: privateMethod
是私有方法,仅被innerCaller
调用。
然而,建议从未被执行。我该怎么解决?
我也尝试了这个切入点:
@Pointcut(value = "execution(* privateMethod(..))")
public void privatePointcut() {
}
建议:
@AfterReturning("privatePointcut()")
public void groupMetrics(JoinPoint point) throws Throwable {
// Do something
}
我也尝试了以下方法:
@Pointcut(value = "execution(* net.space.service.RepositoryService.privateMethod(..))")
@Pointcut(value = "execution(* RepositoryService.privateMethod(..))")
编辑
我也尝试使用@EnableLoadTimeWeaving
:
org.springframework.beans.factory.BeanCreationException: 在类路径资源[org/springframework/context/annotation/LoadTimeWeavingConfiguration.class]中定义的名为'loadTimeWeaver'的bean创建失败:通过工厂方法实例化bean失败;嵌套异常是org.springframework.beans.BeanInstantiationException:无法实例化[org.springframework.instrument.classloading.LoadTimeWeaver]:工厂方法'loadTimeWeaver'抛出异常;嵌套异常是java.lang.IllegalStateException:ClassLoader [sun.misc.Launcher$AppClassLoader]未提供'addTransformer(ClassFileTransformer)'方法。指定自定义LoadTimeWeaver或使用Spring代理启动Java虚拟机:-javaagent:org.springframework.instrument.jar at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:590) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]