找出完整的逻辑.实际上JVM启动时没有任何反应.它全部基于延迟加载,例如真正的JAX-WS /任何提供程序仅在第一次需要时加载/实例化.
在加载JAX-WS实现的情况下:
假设我们想要使用以下代码调用Web服务:
MyService service = new MyService_Service();
MyServiceSoap port = service.getMyServiceSoap();
port.mymethod();
然后,以下事件初始化JAX-WS实现:
>任何JAX-WS Web服务都扩展了javax.xml.ws.Service,因此MyService_Service扩展了Service
>当您创建Web服务的实例时,其超类(javax.xml.ws.Service)也会被初始化(构造函数)
>“Service”的构造函数调用javax.xml.ws.spi.Provider.provider(),这是一个静态方法,它使用javax.xml.ws.spi.FactoryFinder.find()来查找并实例化已实现的实现.
假设我们想要使用以下代码发布Web服务:
@WebService(endpointInterface = "my.package.MyService")
public class MyServiceImp implements MyService {
...
}
MyServiceImp service = new MyServiceImp();
InetSocketAddress addr = new InetSocketAddress(8080);
Executor executor = Executors.newFixedThreadPool(16);
HttpServer server = new HttpServer(addr);
server.setExecutor(executor);
HttpContext context = server.createContext("/MyService");
Endpoint endpoint = Endpoint.create(service);
endpoint.publish(context);
server.start();
然后,以下事件初始化JAX-WS实现:
> Endpoint.create()运行Provider.provider().createEndpoint()
> Provider.provider()是一个静态方法,它使用javax.xml.ws.spi.FactoryFinder.find()来查找并实例化已配置的实现.
以下链接帮助我理解了这一点: