gpt4 book ai didi

java - ByteBuddy 和注解

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:17:34 25 4
gpt4 key购买 nike

我有一堆在普通 JDK 上运行的 Web 服务,我需要拦截所有公共(public)方法才能执行某些操作。一些方法使用@WebParam 注释。使用 ByteBuddy 对 WebService 进行子类化会从覆盖方法中删除 @WebParam 注释,并且该服务不再按预期工作。

这是一个示例签名

public Something fetch( @WebParam( name="Query" ) QueryCriteria query )

下面是我如何使用 ByteBuddy

new ByteBuddy( )
.subclass( implementationClass )
.method( isPublic( ).and( isDeclaredBy( implementationClass ) ) )
.intercept(
MethodDelegation.to( new WebServiceInterceptor( ) )
.andThen( SuperMethodCall.INSTANCE ) )
.annotateType( implementationClass.getAnnotations( ) )
.make( )

我知道有一种方法可以注释参数,但它需要有关方法参数的特殊知识(因为只有一些参数被注释)。我想做的只是要求 ByteBuddy 以与父类(super class)完全相同的方式注释我的类,包括所有重写方法的所有参数。

subclass( implementationClass )
.annotateType( LIKE_SUPERCLASS )
.method( )
.intercept( ... )
.annotateMethod( LIKE_SUPER_INCLUDING_PARAMS )

有什么想法吗?

BR,帕奇

最佳答案

设法自己找到解决方案。

new ByteBuddy( )
.withAttribute( new TypeAttributeAppender.ForInstrumentedType( AnnotationAppender.ValueFilter.AppendDefaults.INSTANCE ) )
.withDefaultMethodAttributeAppender( new MethodAttributeAppender.ForInstrumentedMethod(AnnotationAppender.ValueFilter.AppendDefaults.INSTANCE ) )

会成功的。

sibling

关于java - ByteBuddy 和注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33141278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com