Spring集成:日志记录:从AbstractRequestHandlerAdvice中获取bean名称

yrefmtwq  于 2023-01-08  发布在  Spring
关注(0)|答案(1)|浏览(133)

对于Spring-Integration 6.0.0,我使用AbstractRequestHandlerAdvice隐式记录对http:outbound-gateway的调用(包括输出请求消息头和有效负载以及输入响应消息头和有效负载)。
但是我在从AbstractRequestHandlerAdvice中检索http:outbound-gateway bean本身的名称时遇到了一些困难。
doInvoke()方法接收一个包含http:outbound-gateway bean名称的参数,不幸的是,该参数位于私有类中。

@Override
protected Object doInvoke(ExecutionCallback callback, Object target, Message<?> message) {
    ...
    final String outboundGatewayName = ((AbstractReplyProducingMessageHandler.AdvisedRequestHandler) target).getAdvisedHandler().getBeanName();
    ...
}

target参数是一个私有子类AbstractReplyProducingMessageHandler.AdvisedRequestHandler,它包含方法getAdvisedHandler(),该方法返回http:outbound-gateway bean并允许使用getBeanName()检索bean名称:但是,由于这个子类是private,所以如果不进行一些特殊反射工作,我就无法执行此操作。
是否有一种非私有的方法可以从AbstractRequestHandlerAdvice中检索目标bean的名称?我认为这对于日志记录非常重要。

yyyllmsg

yyyllmsg1#

看起来这样就行了:使用公共接口RequestHandler:

final String outboundGatewayName = 
        ((AbstractReplyProducingMessageHandler.RequestHandler) target)
            .getAdvisedHandler()
            .getBeanName();

相关问题