resteasy-links的研究(八)
本篇文章分析重构后的JsonLinkDecorator,LinksInjector和ObjectLinksProvider的工作原理。以下是ObjectLinksProvider的类图:

可以看到重构以后它也是扩展了AbstractLinksProvider,跟前面文章讲的ClassLinksProvider共同扩展一个AbstractLinksProvider。
这个ObjectLinksProvider被用在JsonLinkDecorator里面:

从上面的逻辑可以看出,provider用来得到entity里面的RESTServiceDiscovery数据并传递给LinksInjector的inject()方法。
所以实际使用RESTServiceDiscovery的是LinksInjector。它的inject()方法如下:

可以看到里面的核心逻辑是通过addAllLinks()方法来往restServiceDiscovery里面注入相关数据。
以上的逻辑中可以看到,整个机制依赖于entity里面要有RESTServiceDiscovery的instance,否则ObjectLinksProvider是无法提取的。
因此后续考虑可以在JsonLinkDecorator里面依据情况分别使用ObjectLinksProvider或者ClassLinksProvider,这样对于没有RESTServiceDiscovery的instance的entity,也可以通过ClassLinksProvider来动态生成一个。此外要考虑一下怎样把动态生成的RESTServiceDiscovery数据通过LinksInjector注入到entity里面去。