我是ByteBuddy的新手并且有一个简单的问题。有没有办法如何通过注释将拦截器组合在一起。类似的东西:
@Logging
@Transactional
public void foo() {}
会添加日志记录拦截器并确保它是事务性的吗?
答案 0 :(得分:0)
当然,如果您使用ByteBuddy
实例,则由使用的ElementMatcher
决定:
annotatedWith(Logging.class).or(annotatedWith(Transactional.class))
当您使用AgentBuilder
时,您将为每种类型定义一个检测,您可以使用
.type(declaresMethod(annotatedWith(Logging.class)))
.transform(new LoggingTranformer())
.asDecorator()
.type(declaresMethod(annotatedWith(Transactional.class)))
.transform(new TransactionalTranformer())
.asDecorator()
使用asDecorator()
命令,两个变换器被链接。
答案 1 :(得分:0)
感谢Rafael Winterhalter和讨论,我发布了他建议的答案:
您需要编写自己的通用调度程序。我建议你创建一些通用调度程序,然后以编程方式委派。
例如:isAnnotatedWith(anyOf(dispatcher.getAnnotationTypes())
然后调度程序将路由到相关组件。