저는 HK2 주입을 사용하여 작업중인 저지/부두 설치를 해킹 할 수 있었지만, 다소 혼란스럽고 (때로는 일치하지 않는) 문서가 많아서, 제가 찾았는지 확실하지 않습니다. 그것을 얻는 것의 약간의 현저한 세부 사항을 놓쳤다. .. 서 있기 때문에, 나는 이처럼 서블릿을 부트 스트랩하고있다;Jersey 2 (부두가있는)를 부트 스트랩하는 올바른 방법은 무엇입니까?
// Jersey
ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.NO_SESSIONS);
ServletContainer jerseyServletContainer = new ServletContainer(new AppResourceConfig());
ServletHolder jerseyServletHolder = new ServletHolder(jerseyServletContainer);
servletContextHandler.setContextPath("/");
servletContextHandler.addServlet(jerseyServletHolder, "/api/*");
// Wire up Jetty
HandlerCollection handlerList = new HandlerCollection();
handlerList.setHandlers(new Handler[]{ servletContextHandler });
Server server = new Server(configuration.getInt("Server.Port"));
server.setHandler(handlerList);
server.start();
server.join();
나는 내 AppResourceConfig를 다음과 같이 정의합니다.
public class AppResourceConfig extends ResourceConfig {
public AppResourceConfig() {
register(new AppBinder());
packages("org.sandbox.resources");
}
}
그리고 내 AppBinder는 다음과 같습니다.
public class AppBinder extends AbstractBinder {
@Override
protected void configure() {
bind(new StringService()).to(StringService.class);
}
}
이 모든 것이 간단한 테스트 케이스에서 작동하지만 몇 가지 사항은 분명하지 않습니다. Jersey 문서는 확장해야하는 Application 클래스를 참조하고 Injections.addBinding을 사용하여 바인딩을 설정합니다. 그러나이를 위해 어떻게 든 @Inject를 사용하여 ServiceLocator 인스턴스를 생성자에 가져옵니다. 그리고 그들은 전혀 바인더를 만들지 않는 것처럼 보입니다. (https://jersey.java.net/documentation/latest/migration.html-26.14.1.1. 사용자 정의 객체 삽입).
누군가 내 접근 방식이 올바른지 여부를 알려주고 Application과 ResourceConfig의 차이점을 알려주고 실제로 프레임 워크가 의도 한 것과 일관성을 유지하기 위해해야 할 일은 무엇입니까?
호기심에서 벗어나 순수한 JAX-RS 접근 방식은 어떻게 생겼을까요? 응용 프로그램 용 ResourceConfig를 바꿀 수 있습니까? – XeroxDucati
@XeroxDucati 그렇습니다. Jersey 또는 다른 프레임 워크가 아닌 JAX-RS API 만 가져올 수도 있습니다. Pure JAX-RS는 더 제한적이기 때문에 저지가 제공하는 기능에 대한 대체 솔루션을 찾아야합니다. ResourceConfig에서 구성하는 대신 web.xml을 사용하거나 표준에서 정의 된 다른 구성 방법을 사용해야합니다. – Kapep