I created a project Resteasy를 사용하여 Jax-rs 리소스에서 Google Guice가 제공하는 의존성 삽입을 테스트합니다.Resteasy와 Google Guice : @Injection으로 여러 개의 @ApplicationPath 및 리소스를 사용하는 방법?
내 의도는 다음과 같습니다 내 API의 버전
- 를 사용하여 여러
@ApplicationPath
.@ApplicationPath
으로 주석 된 각 클래스에서 특정 버전에 대한 클래스 집합을로드합니다. - 각 리소스에는 일부 서비스를 주입하기 위해 생성자에 Google Guice의
@Inject
이 있습니다.ApplicationV1RS
및ApplicationV2RS
:
나는 @ApplicationPath
주석이 개 클래스를 만들었습니다. 둘 모두에서 동일한 테스트를 위해서만 동일한 리소스 클래스 (UserResource
및 HelloResource
)를 추가했습니다.
내 모듈은 다음과 같이 구성되어 있습니다 :
public class HelloModule implements Module
{
public void configure(final Binder binder)
{
binder.bind(IGreeterService.class).to(GreeterService.class);
binder.bind(IUserService.class).to(UserService.class);
}
}
내가 http://localhost:9095/v1/hello/world
또는 http://localhost:9095/v2/hello/world
전화
java.lang.RuntimeException: RESTEASY003190: Could not find constructor
for class: org.jboss.resteasy.examples.guice.hello.HelloResource
글쎄, 내가 예상대로이없는 작품. Google Guice는 나를 위해 construtor를 사용하여 리소스 클래스를 인스턴스화하는 "똑똑한"것은 아닙니다.
그러나 나는 일할 길을 찾을 수 없습니다. 정말로 솔직히 말해서, 나는이 시나리오에서 Google Guice, Jetty 및 Resteasy가 서로 어떻게 연동하는지 혼란 스럽다. 내가 사용 @ApplicationPath
의 아이디어를 포기하는 경우
, 내 자원이 구글 Guice 이런 내 HelloModule
을 구성하는 작업 :
public class HelloModule implements Module
{
public void configure(final Binder binder)
{
binder.bind(HelloResource.class);
binder.bind(IGreeterService.class).to(GreeterService.class);
binder.bind(UserResource.class);
binder.bind(IUserService.class).to(UserService.class);
}
}
그러나이 경우
, 나는 (HelloResource
내 자원을 등록 할 컨트롤을 통과하고있어
UserResource
)를 Guice에게 보냅니다. 유연하지 않아 복수형을 설정할 수 없습니다
@ApplicationPath
.
그럼 내가 이해하지 못하거나 이해하지 못하는 것은 무엇입니까?
문제 코드로 프로젝트를 만들었습니다. 설정 및 테스트가 매우 쉽습니다. https://github.com/dherik/resteasy-guice-hello/tree/so-question/README.md
감사합니다.
그리고 web.xml 여전히 필요하지 않니? 내가 맞습니까? – SayusiAndo