【问题标题】:Bytebuddy javaagent intercepting spring beans annotated with *.ControllerBytebuddy javaagent 拦截带有 *.Controller 注释的 spring bean
【发布时间】:2018-02-22 15:59:21
【问题描述】:

正如标题所示,我正在制作一个 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”注释的类型中,而在我的代理中没有弹簧依赖;这是怎么做到的?

我试过了

..ElementMatchers.annotationType(ElementMatchers.named("org.springframework.web.bind.annotation.RestController");

这不起作用。

【问题讨论】:

    标签: java spring-boot logging javaagents byte-buddy


    【解决方案1】:

    你可以使用:

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

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

    【讨论】:

    • 非常感谢,我喜欢你在 bytebuddy 上的工作;很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 1970-01-01
    • 2023-04-01
    • 2020-02-19
    • 1970-01-01
    相关资源
    最近更新 更多