java Bytebuddy javaagent拦截带*注释的SpringBean。控制器
正如标题所示,我正在制作一个javaagent,其主要目的是为任何spring boot应用程序制作一个好的记录器;现在
我目前所做的通常是:
private static void install(String className, String methoName, Instrumentation instr) {
new AgentBuilder.Default().disableClassFormatChanges()
.with(AgentBuilder.RedefinitionStrategy.RETRANSFORMATION)
.type(ElementMatchers.named(className))
.transform((builder, typeDescription, classLoader, module) -> {
return builder.visit(Advice.to(AdviceDispatcherServlet.class).on(ElementMatchers.named(methoName)));
}).installOn(instr);
}
如果我知道类的路径,即“org.springframework.web.servlet.DispatcherServlet”和方法“doDispatch”,那么它的效果会非常好
现在,我只希望将建议添加到带有“org.springframework.web.bind.annotation.RestController”注释的类型中,而不希望代理中存在spring依赖项;如何做到这一点
我试过了
..ElementMatchers.annotationType(ElementMatchers.named("org.springframework.web.bind.annotation.RestController");
这不管用
# 1 楼答案
你可以使用:
您当前匹配的是完整批注,而不是批注类型