我喜欢使用构造函数添加依赖项的能力。特别是自动装配这些依赖项。
例如
public class MyClass {
private final Dependency dependency;
@Autowired
public MyClass(@Qualifier("bean-id") Dependency dependency) {
this.dependency = dependency;
}
}
我发现如果上面的“依赖”类恰好是一个传递给工作流工作者的类并且缺少默认的空构造函数,那么 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 采用类?