Spring如何调用Argumented Constructor

时间:2015-08-07 07:13:29

标签: java spring spring-mvc spring-boot

我有这个课程

@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);
    }

我得到空指针,异常对我有意义但我怎么解决它>?

请提供宝贵的意见。感谢。

2 个答案:

答案 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%的答案,但它是工作。我希望有一天,我会找到正确的解决方案。 如果您正在阅读本文并以其他方式思考并有更好的解决方案,那么请评论。