泽西2 + HK2 - @ApplicationScoped无法正常工作

时间:2016-06-12 16:46:28

标签: java dependency-injection jersey-2.0 hk2

我有课

polymer serve

我希望全局成为一个实例。

问题是,当我在两个不同的地方注入此服务时,我有两个不同的服务实例 - 这导致总是返回计数器@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()

我创建了这个服务来测试我的HK2-Jersey实现,这显然不能正常工作。

Web.xml中:

package.services.Service@492e4f4b
package.services.Service@4bc86c4d

ApplicationConfiguration.java:

<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>

}

如果没有此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"); } 函数,服务器会抛出bind不满意的异常。

任何人都可以指出,出了什么问题?

1 个答案:

答案 0 :(得分:1)

HK2中没有@ApplicationScoped这样的东西。那只是CDI(不同)。在HK2,有一个单身范围。使用您的配置,您可以执行

bind(new Service()).to(Service.class); 

将自动使其成为单身人士。唯一的问题是您丢失了容器的任何注射(如果您需要)。另一种方法是在in(Scope)方法

中设置范围
bind(Service.class).to(Service.class).in(Singleton.class); 

那是javax.inject.Singleton