首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HK2工厂单例绑定

HK2工厂单例绑定
EN

Stack Overflow用户
提问于 2019-04-20 05:33:08
回答 1查看 527关注 0票数 0

如何使用带有泛型类型的AbstractBinder创建HK2工厂类并将其绑定为单例实例。

EN

回答 1

Stack Overflow用户

发布于 2019-04-20 05:33:08

AccessTokenProviderFactory.java

代码语言:javascript
复制
package org.bitguiders.api.factories;

import org.bitguiders.util.proivders.AccessTokenProvider;
import org.glassfish.hk2.api.Factory;

public class AccessTokenProviderFactory implements Factory<AccessTokenProvider> {

    @Override
    public AccessTokenProvider provide() {
        return new AccessTokenProvider();
    }
    /**
     * This method will dispose of objects created with this scope.  This method should
     * not be annotated, as it is naturally paired with the provide method
     * 
     * @param instance The instance to dispose of
     */
    public void dispose(AccessTokenProvider instance) {
    }

}

扩展AbstractBinder的DependencyBinder.java

代码语言:javascript
复制
package org.bitguiders.ciam.acc.cfg;

import javax.inject.Singleton;
import org.glassfish.hk2.api.TypeLiteral;
import org.glassfish.hk2.utilities.binding.AbstractBinder;
import org.glassfish.jersey.process.internal.RequestScoped;


public class DependencyBinder extends AbstractBinder{

@Override
protected void configure() {
    bind(AccountManagementServiceImpl.class).to(AccountManagementService.class).in(Singleton.class);
    bindFactory(AccessTokenStoreFactory.class).proxy(true).proxyForSameScope(false).to(AccessTokenStore.class).in(RequestScoped.class);
    bind(CASLocationServiceImpl.class).to(LocationService.class).named(CAS_LOCATION_SERVICE).in(Singleton.class);
    bindAsContract(LocationServiceFactory.class).in(Singleton.class);
// If AccessTokenProvider.java is one of the impl of MyTokenProvider<T> 
//bindFactory(AccessTokenProviderFactory.class).to(AccessTokenProvider.class).to(new TypeLiteral<MyTokenProvider<String>>(){}).in(Singleton.class);
  bindFactory(AccessTokenProviderFactory.class).to(AccessTokenProvider.class).in(Singleton.class);

应用程序配置类向您展示我是如何注册DepedencyBinder的。

代码语言:javascript
复制
package org.bitguiders.ciam.acctmgt.cfg

import javax.ws.rs.ApplicationPath;

import org.bitguidres.api.exceptions.GenericExceptionMapper;
import org.glassfish.jersey.jackson.JacksonFeature;
import org.glassfish.jersey.server.ResourceConfig;

@ApplicationPath("acc/api/*")
public class ApplicationConfig extends ResourceConfig {
    public ApplicationConfig() {
        packages("org.cas.ciam.acctmgt");
        register(JacksonFeature.class);
        register(GenericExceptionMapper.class);
        register(new DependencyBinder());
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55768091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档