resteasy-links的研究(八)

本篇文章分析重构后的JsonLinkDecoratorLinksInjectorObjectLinksProvider的工作原理。以下是ObjectLinksProvider的类图:

可以看到重构以后它也是扩展了AbstractLinksProvider,跟前面文章讲的ClassLinksProvider共同扩展一个AbstractLinksProvider

这个ObjectLinksProvider被用在JsonLinkDecorator里面:

从上面的逻辑可以看出,provider用来得到entity里面的RESTServiceDiscovery数据并传递给LinksInjectorinject()方法。

所以实际使用RESTServiceDiscovery的是LinksInjector。它的inject()方法如下:

可以看到里面的核心逻辑是通过addAllLinks()方法来往restServiceDiscovery里面注入相关数据。

以上的逻辑中可以看到,整个机制依赖于entity里面要有RESTServiceDiscovery的instance,否则ObjectLinksProvider是无法提取的。

因此后续考虑可以在JsonLinkDecorator里面依据情况分别使用ObjectLinksProvider或者ClassLinksProvider,这样对于没有RESTServiceDiscovery的instance的entity,也可以通过ClassLinksProvider来动态生成一个。此外要考虑一下怎样把动态生成的RESTServiceDiscovery数据通过LinksInjector注入到entity里面去。

Powered by Jekyll and Theme by solid