RestasyClientBuilder的build()过程,以及注入tracingLogger的方式
RESTEasy提供两种创建client的方式:
文档中介绍的两种方式如下:
实际上JAX-RS标准的ClientBuilder
的build()
方法是依赖于具体实现的:
因此查看RestasyClientBuilder
就好:
这里的config
的类型是ClientConfiguration
:
ClientConfiguration config = new ClientConfiguration(getProviderFactory());
build()
最后的逻辑如下:
看到config
和其它参数一起被传入createRestesayClient(...)
方法:
可以看到所有的参数最终传入ResteasyClient
的constructor。
有了ResteasyClient
,就可以进行客户端的call:
那么我们应该是让tracing logger跟着invocation来走的。从上面看到,client
进行请求的时候,是创建web target,而Resteasy当中实际的实现是ClientWebTarget
:
在ClientWebTarget
当中,重点是构架ClientInvocationBuilder
:
而invocation builder则是构建invocation
来负责实际的request:
以下是这些classes的整体设计:
综上所述,得出结论如下:
- 我们可以通过
ResteasyProviderFactory
设置TracingLogger的级别。 - Client这边的tracingLogger的生成life scope应该是per invocation。
- Client这边并没有
ON_DEMAND
tracing mode。要么ALL
,要么OFF
具体的实现以最终代码为准。