我有这个课程
@Component
public class Workflow{
使用默认和参数构造函数 像这样的东西
public Workflow(GraphModel graph, JSONObject state, String md5Hash)
throws InvalidGraphException {
this(graph);
this.setState(state);
this.setMd5Hash(md5Hash);
}
现在我使用
@Autowired
Workflow workflow;
它运作得很好 但是我想用参数调用构造函数。我怎么能实现这个呢?
请注意我尝试像这样创建bean
@Configuration
@ComponentScan("com.xyz.abc.*")
public class BlueBerryBeansConfiguration {
@Bean
public Workflow getWorkflow(GraphModel graph, JSONObject getJson,
String getmd5) throws InvalidGraphException {
return new Workflow(graph, getJson, getmd5);
}
@Bean
public JSONObject getJson() {
return new JSONObject();
}
@Bean
public String getmd5() {
return new String();
}
}
并在Workflow构造函数中
@Autowired
public Workflow(GraphModel graph, JSONObject state, String md5Hash)
throws InvalidGraphException {
this(graph);
this.setState(state);
this.setMd5Hash(md5Hash);
}
public Workflow(GraphModel graph) throws InvalidGraphException {
this.setUnpackedGraph(graph);
}
我得到空指针,异常对我有意义但我怎么解决它>?
请提供宝贵的意见。感谢。
答案 0 :(得分:1)
在构造函数上使用@Autowired
注释应该这样做。如果它不起作用,请尝试删除默认构造函数(如果有)。
答案 1 :(得分:0)
我已经改变了我的方法,因为我所学到的是
@Bean
public Workflow getWorkflow(GraphModel graph, JSONObject getJson,
String getmd5) throws InvalidGraphException {
return new Workflow(graph, getJson, getmd5);
}
根据上面的代码,我需要将GraphModel,JSONObject和getmd5声明为bean,因为GraphModel和JSONObject具有非无参数构造函数引发另一个问题所以我必须将它们声明为bean所以它会形成一种复杂的循环。
所以如果你的情况也像我的那样,那么最好打电话给
@Autowired
Workflow workflow;
然后显式设置图形和json对象。它不是100%的答案,但它是工作。我希望有一天,我会找到正确的解决方案。 如果您正在阅读本文并以其他方式思考并有更好的解决方案,那么请评论。