【问题标题】:HK2 Factory Singleton bindingHK2 工厂单例绑定
【发布时间】:2019-04-19 21:33:08
【问题描述】:

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

【问题讨论】:

    标签: java singleton factory hk2


    【解决方案1】:

    AccessTokenProviderFactory.java

    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) {
        }
    
    }
    

    DependencyBinder.java 扩展了 AbstractBinder

    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 的应用程序配置类。

    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());
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-12
      相关资源
      最近更新 更多