首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Hk2生成具有指定构造函数args的实例

使用Hk2生成具有指定构造函数args的实例
EN

Stack Overflow用户
提问于 2015-05-26 10:28:48
回答 1查看 1.1K关注 0票数 0

我在代码中使用了HK2和服务定位器模式。以下是接口:

代码语言:javascript
复制
package org.swx.nursing.tools.sqlfinder.gui;

import org.jvnet.hk2.annotations.Contract;
import org.swx.nursing.tools.sqlfinder.servicelocator.ServiceLocatorFactory;

@Contract
public interface GuiTemplate {

    public void createAndShowGUI(GuiTemplateCriteria criteria);

    public static final class Factory{

        //Disable public instantiation
        private Factory (){
            throw new AssertionError();
        }

        public static GuiTemplate create(){
            return ServiceLocatorFactory.getInstance().getService(GuiTemplate.class);
        };
    }
}

以下是上述接口的实现类:

代码语言:javascript
复制
package org.swx.nursing.tools.sqlfinder.gui;

import org.jvnet.hk2.annotations.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Service
public final class GuiTemplateImpl implements GuiTemplate{


    private static final long serialVersionUID = 7583852594722977867L;
    private static final Logger LOGGER      = LoggerFactory.getLogger(GuiTemplateImpl.class);

    private static GuiTemplateCriteria  criteria;

    public GuiTemplateImpl(GuiTemplateCriteria  criteria) {
        this.criteria = criteria;
    }

如果我想要获取上述类的一个实例,以便可以传递构造函数的参数,我该怎么做呢?

我知道下面的代码将调用无参数构造函数并返回一个带有实现类的对象:

代码语言:javascript
复制
ServiceLocatorUtilities.createAndPopulateServiceLocator().getService(GuiTemplate.class);

接口在这里:https://hk2.java.net/hk2-api/apidocs/org/glassfish/hk2/api/ServiceLocator.html

请指教,

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2015-05-27 03:49:52

您必须在构造函数上使用@Inject,如下所示:

代码语言:javascript
复制
@Service
public final class GuiTemplateImpl implements GuiTemplate{


    private static final long serialVersionUID = 7583852594722977867L;
    private static final Logger LOGGER      = LoggerFactory.getLogger(GuiTemplateImpl.class);

    private static GuiTemplateCriteria  criteria;

    @javax.inject.Inject
    public GuiTemplateImpl(GuiTemplateCriteria  criteria) {
        this.criteria = criteria;
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30448492

复制
相关文章

相似问题

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