【问题标题】:Spring Cloud AWS InstantiationException thrown when using @Autowire使用@Autowire 时抛出 Spring Cloud AWS InstantiationException
【发布时间】:2015-03-06 03:53:54
【问题描述】:

我喜欢使用构造函数添加依赖项的能力。尤其是自动装配这些依赖项。

例如

public class MyClass {
    private final Dependency dependency;

    @Autowired
    public MyClass(@Qualifier("bean-id") Dependency dependency) {
        this.dependency = dependency;
    }

}

我发现,如果上面的“Dependency”类恰好是传递给 Workflow 工作线程的类并且缺少默认的空构造函数,则 Spring Cloud AWS 框架会引发“InstantiationException”。

具体例子:

public class MyClass {
    private final DependencyWorkflowClientExternalFactory clientFactory;

    @Autowired
    public MyClass(@Qualifier("bean-id") DependencyWorkflowClientExternalFactory clientFactory) {
        this.clientFactory = clientFactory;
    }
}

public class WorkflowInitializer {

    @Autowired
    private WorkflowWorker workflowWorker; //assume wired with correct credentials    

    public WorkflowInitialiser() {
         init();
    }

    public init() {
        workflowWorker.addWorkflowImplementationType(MyClass.class);
    }
}

以上失败:

java.lang.InstantiationException: com.mypackage.MyClass
at java.lang.Class.newInstance(Class.java:359)

我必须这样做:

public class MyClass {
    @Autowired
    @Qualifier("bean-id")
    private Dependency dependency; 

    public MyClass() {
    }
}

问题是:

在 Spring Cloud 框架的当前版本中是否可以在构造函数上使用 @Autowire 注释?是否需要将注释添加到实例字段?

我问(并假设“是”),因为工作流工作者采用类类型,而不是为他们的工作流实现实例化对象。

作为次要问题:

为什么 ActivityWorkers 采用对象的实例,而 WorkflowWorkers 采用类?

【问题讨论】:

    标签: spring amazon-web-services reflection annotations spring-cloud


    【解决方案1】:

    这个问题其实和 Spring Cloud AWS 无关,而是 AWS Flow Framework for Java。

    您正在使用“默认”WorkflowWorker,它将工作流实现实例化为 POJO。因此,您的 MyClass 类不是作为 Spring bean 创建的,而是作为 POJO 创建的。

    您应该使用 AWS Flow Framework 提供的 SpringWorkflowWorker 以更好地与 Spring 集成。有关更多信息,请查看 AWS Flow Framework documentation 解释与 Spring 的集成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 2014-02-20
      • 1970-01-01
      • 1970-01-01
      • 2016-11-01
      • 1970-01-01
      相关资源
      最近更新 更多