Java 带有多个构造函数的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

我有一个类,它有两个构造函数。我正在尝试使用guice工厂创建此类的实例。如果未传递任何参数,则应调用默认构造函数。如果传递了参数,则应调用带有参数的构造函数。但目前,即使我将参数传递给工厂方法,仍然会调用默认构造函数。没有调用带参数的构造函数。下面是我的工厂课程

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
希望这有帮助