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
里面去。