【发布时间】:2021-12-29 07:56:43
【问题描述】:
我正在使用 Micronaut 3.0 和 Byte Buddy 1.12.6,Groovy 进行测试。
当我在 IntelliJ 中一次运行整个测试包时会出现问题(不必是整个包,1 个以上的测试类就足够了)。
随着每个测试类的执行,它为代理匹配的每个类创建 +1 变换。
执行的第一个测试类:
[Byte Buddy] TRANSFORM com.class [jdk.internal.loader.ClassLoaders$AppClassLoader@5ffd2b27, unnamed module @87a85e1, Thread[Test worker,5,main], loaded=true]
执行的第二个测试类:
[Byte Buddy] TRANSFORM com.class [jdk.internal.loader.ClassLoaders$AppClassLoader@5ffd2b27, unnamed module @87a85e1, Thread[Test worker,5,main], loaded=true]
[Byte Buddy] TRANSFORM com.class [jdk.internal.loader.ClassLoaders$AppClassLoader@5ffd2b27, unnamed module @87a85e1, Thread[Test worker,5,main], loaded=true]
执行的第三个测试类:
[Byte Buddy] TRANSFORM com.class [jdk.internal.loader.ClassLoaders$AppClassLoader@5ffd2b27, unnamed module @87a85e1, Thread[Test worker,5,main], loaded=true]
[Byte Buddy] TRANSFORM com.class [jdk.internal.loader.ClassLoaders$AppClassLoader@5ffd2b27, unnamed module @87a85e1, Thread[Test worker,5,main], loaded=true]
[Byte Buddy] TRANSFORM com.class [jdk.internal.loader.ClassLoaders$AppClassLoader@5ffd2b27, unnamed module @87a85e1, Thread[Test worker,5,main], loaded=true]
等等
示例测试类
@MicronautTest(transactional = false, environments = "db")
@Stepwise
@Slf4j
class TestClass with Specification {
def "test method"() {
.....
}
}
我的代理类:
@Context
public class LoggingAgent {
@PostConstruct
private void premain() {
new AgentBuilder.Default()
.disableClassFormatChanges()
.with(AgentBuilder.Listener.StreamWriting.toSystemError().withTransformationsOnly())
.with(AgentBuilder.InstallationListener.StreamWriting.toSystemError())
.with(AgentBuilder.RedefinitionStrategy.RETRANSFORMATION)
.type(isSubTypeOf(Test.class).and(not(isAbstract())))
.transform((builder, typeDescription, classLoader, module) -> builder.visit(Advice.to(LoggingAdvice.class).on(isMethod())))
.installOn(ByteBuddyAgent.install());
}
}
建议
public class LoggingAdvice {
@Advice.OnMethodEnter
public static void intercept(@Advice.Origin Method method, @Advice.AllArguments Object[] args) throws Exception {
.....
}
}
【问题讨论】:
标签: java micronaut byte-buddy