Java 带有多个构造函数的Guice辅助注入始终调用默认构造函数
我有一个类,它有两个构造函数。我正在尝试使用guice工厂创建此类的实例。如果未传递任何参数,则应调用默认构造函数。如果传递了参数,则应调用带有参数的构造函数。但目前,即使我将参数传递给工厂方法,仍然会调用默认构造函数。没有调用带参数的构造函数。下面是我的工厂课程Java 带有多个构造函数的Guice辅助注入始终调用默认构造函数,java,dependency-injection,constructor,guice,assisted-inject,Java,Dependency Injection,Constructor,Guice,Assisted Inject,我有一个类,它有两个构造函数。我正在尝试使用guice工厂创建此类的实例。如果未传递任何参数,则应调用默认构造函数。如果传递了参数,则应调用带有参数的构造函数。但目前,即使我将参数传递给工厂方法,仍然会调用默认构造函数。没有调用带参数的构造函数。下面是我的工厂课程 public interface MapperFactory { PigBagMapper createPigBagMapper(@Assisted("pigMetaInfoList") List<String> sou
public interface MapperFactory {
PigBagMapper createPigBagMapper(@Assisted("pigMetaInfoList") List<String> sourceMetaInfoList);
JsonMapper createJsonMapper(@Assisted("apiName") String apiName) throws EndpointNotFoundException, JsonMapperException;
JsonMapper createJsonMapper();
}
下面是我如何调用构造函数的
mapperFactory.createJsonMapper(apiName);
我做错了什么?任何帮助都将不胜感激
编辑:
请注意,JsonMapperImpl类没有构造函数。它只有一个公共方法,仅此而已。我看到两个问题
第1期:您不需要使用@Assisted
第2期:Guice将在您使用工厂时尝试创建jsonApperImpl
的外观。它将扫描带有@AssistedInject
注释的正确的JsonMapperImpl
构造函数。没有。例如,您不能调用新的JsonMapperImpl(“xyz”)。这将是一个编译时错误,因为构造函数JsonMapperImpl(字符串)未定义
在JsonMapperImpl
中也没有用@AssistedInject
注释的构造函数。它是空的
如果您以类似的方式重写课堂:
public class JsonMapperImpl extends JsonMapper
{
@AssistedInject
public JsonMapperImpl() {
super();
}
@AssistedInject
public JsonMapperImpl(@Assisted String apiName) {
super(apiName);
}
}
以及:
然后JsonMapperImpl
将公开适当的构造函数,代码将正常工作,例如:
JsonMapper noApi = factory.createJsonMapper();
JsonMapper api = factory.createJsonMapper("test");
System.out.println(noApi.getAPI());
System.out.println(api.getAPI());
产出:
null
test
希望这有帮助。我看到两个问题
第1期:您不需要使用@Assisted
第2期:Guice将在您使用工厂时尝试创建jsonApperImpl
的外观。它将扫描带有@AssistedInject
注释的正确的JsonMapperImpl
构造函数。没有。例如,您不能调用新的JsonMapperImpl(“xyz”)。这将是一个编译时错误,因为构造函数JsonMapperImpl(字符串)未定义
在JsonMapperImpl
中也没有用@AssistedInject
注释的构造函数。它是空的
如果您以类似的方式重写课堂:
public class JsonMapperImpl extends JsonMapper
{
@AssistedInject
public JsonMapperImpl() {
super();
}
@AssistedInject
public JsonMapperImpl(@Assisted String apiName) {
super(apiName);
}
}
以及:
然后JsonMapperImpl
将公开适当的构造函数,代码将正常工作,例如:
JsonMapper noApi = factory.createJsonMapper();
JsonMapper api = factory.createJsonMapper("test");
System.out.println(noApi.getAPI());
System.out.println(api.getAPI());
产出:
null
test
希望这有帮助