入口点在RestfulServletContainerListener类,通过resteasy.injector.factory设置RestfullInjectorFactory,对方法进行动态修改(类似invocationhandler),JAX-RS调用动态修改为对Provider调用。
调协resteasy.providers设置@Provider,明确错误输出。(与之相反的输入为@Consumer)。
在Server初始化时,调用server.getDeployment().getRegistry().addResourceFactory(new ProviderResource<T>(provider));
加入motan定制ResourceFactory,ResourceFactory主要用于加载Resource对应的被代理类。
public void registered(ResteasyProviderFactory factory) {
factory.getInjectorFactory().createPropertyInjector(resourceClass, factory).inject(provider.getImpl());
}
public Object createResource(HttpRequest request, HttpResponse response, ResteasyProviderFactory factory) {
return provider;
}
总体还是使用RestfullInjectorFactory提供的MethodInjector和PropertyInjector,动态替代method.invoke和resource支撑类.
NettyEndpointFactory代码更明显,使用RestfulInjectorFactory动态修改方法和支撑类。
网友评论