我在代码中使用了HK2和服务定位器模式。以下是接口:
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);
};
}
}以下是上述接口的实现类:
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;
}如果我想要获取上述类的一个实例,以便可以传递构造函数的参数,我该怎么做呢?
我知道下面的代码将调用无参数构造函数并返回一个带有实现类的对象:
ServiceLocatorUtilities.createAndPopulateServiceLocator().getService(GuiTemplate.class);接口在这里:https://hk2.java.net/hk2-api/apidocs/org/glassfish/hk2/api/ServiceLocator.html
请指教,
谢谢!
发布于 2015-05-27 03:49:52
您必须在构造函数上使用@Inject,如下所示:
@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;
}
}https://stackoverflow.com/questions/30448492
复制相似问题