同时执行setter和构造函数注入

时间:2018-07-11 18:20:39

标签: spring beancreationexception

我是Spring框架的新手。我试图用两种注入方法(Setter和构造函数)注入依赖项。我期待在setter注入中定义的输出,因为它被构造函数注入覆盖。但是,我收到了类似

的错误消息
  

Bean创建例外:未找到默认构造函数

如果同时使用两种注入方法,会抛出错误吗?

1 个答案:

答案 0 :(得分:1)

  

我试图用两种注入方法注入依赖项(Setter   和构造函数)。

您应该能够做到。根据Spring版本,结果可能有所不同,但是我可以确认它可以与Spring 5版本一起使用。

您的错误:

  

Bean创建例外:找不到默认构造函数。

认为Spring不认为带有参数的构造函数是自动装配bean的方法。
在旧的Spring版本中(我不记得3个以下,甚至4个),您必须在构造函数中指定@Autowired,以使Spring意识到这一点。
因此,您应该声明:

@Autowired
public void setMyDep(MyDep myDep) {
    this.myDep = myDep;
}

@Autowired
public FooBean(MyOtherDep myOtherDep) {
    this.myOtherDep = myOtherDep;
}

在最新的Spring版本中,不再需要声明@Autowired

@Autowired
public void setMyDep(MyDep myDep) {
    this.myDep = myDep;
}

public FooBean(MyOtherDep myOtherDep) {
    this.myOtherDep = myOtherDep;
}