【发布时间】: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