有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    你可以使用:

    isAnnotatedWith(named("org.springframework.web.bind.annotation.RestController"))
    

    您当前匹配的是完整批注,而不是批注类型