【发布时间】:2018-11-14 11:15:32
【问题描述】:
我需要捕获私有内部调用方法。
所以,我需要在我的 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 是private,仅由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 在 org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:590) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
【问题讨论】:
-
我的回答有帮助吗?请告诉我,如果不是,我可以提供更多帮助
标签: spring spring-boot spring-aop