1
작동하지 @ApplicationScoped 나는 수업이저지 2 + HK2 -
전 세계적으로 하나 개의 인스턴스가되고 싶어요@ApplicationScoped
public class Service{
private Map<String, Integer> something ;
private final Logger LOGGER = LoggerFactory.getLogger(Service.class);
@PostConstruct
public void initialize(){
something = new HashMap<>();
}
public void increase(String userName){
something.put(userName, something.getOrDefault(userName, 0) + 1);
}
public Map<String, Integer> getSomething(){
return this.something;
}
public Integer getSomethingForUser(String userName){
return something.getOrDefault(userName, 0);
}
}
.
이 서비스를 두 곳의 다른 장소에 주입 할 때 항상 두 개의 다른 서비스 인스턴스가 있습니다. 이는 항상 카운터 0
을 반환합니다. .toString()
반환 다음은 :
[email protected]
[email protected]
나는 분명히 정상적으로 작동하지 않는 내 HK2 - 저지 구현을 테스트하기 위해이 서비스를 만들었습니다.
의 Web.xml :
<servlet-name>jersey-serlvet</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>io.swagger.jaxrs.listing,mypackage.rest</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>
io.swagger.jaxrs.listing.ApiListingResource,
io.swagger.jaxrs.listing.SwaggerSerializers
</param-value>
</init-param>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>mypackage.config.ApplicationConfiguration</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jersey-serlvet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
ApplicationConfiguration.java :
bind
기능이없는
public class ApplicationConfiguration extends ResourceConfig {
public ApplicationConfiguration() {
register(new AbstractBinder() {
@Override
protected void configure() {
bind(Service.class).to(Service.class);
}
});
packages(true, "com.mypackage.rest");
}
}
는 서버 @Inject
만족 아니라고 예외를 던진다.
아무도 지적 할 수 있습니까?
감사합니다. 매력적이었습니다. 이 클래스를 자동으로 바인드 할 수있는 방법이 있거나 여기에 수동으로 추가해야한다면 어떨까요? – deem
다른 질문을 게시하고 싶다면 답해 주셔서 감사합니다. –
저지에는 @ApplicationScoped에 대한 자체 정의가 있다고 생각합니다. 다른 인스턴스를 보았을 수도있는 이유는 그것이 프록시 범위이기 때문에 주입 된 프록시는 동일한 기본 서비스 (동일한 ==를 사용하여 비교할 때 == 사용) 인 경우에도 다른 경우입니다. – jwells131313