当前位置: 首页 > 知识库问答 >
问题:

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

虞华彩
2023-03-14

我是Spring框架的新手。我试图用注入方法(Setter和构造函数)注入依赖关系。我期待在 setter 注入中定义的输出,因为它被构造函数注入覆盖。但是,我收到了如下错误消息

Bean创建异常:未找到默认构造函数

如果我们同时应用两种注入方法,会不会出错?

共有1个答案

狄承望
2023-03-14

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

你应该能够做到这一点。根据Spring版本,结果可能会有所不同,但我可以确认它适用于Spring 5版本。

您的错误 :

Bean创建异常:未找到默认构造函数。

认为带有参数的构造函数不被Spring视为自动连接豆子的一种方式。
在旧的Spring版本中(3个或更少,也许4个我不记得了),你必须在构造函数中指定@Autowired,以使Spring意识到它。
所以你应该声明:

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

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

在最近的Spring版本中,不再需要声明@Autowere

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

public FooBean(MyOtherDep myOtherDep) {
    this.myOtherDep = myOtherDep;
}
 类似资料:
  • 请帮助理解在哪种情况下我应该使用构造函数注入和设置器注入。请帮我举个合适的例子。 先谢谢你。

  • 大家都知道@Autowired(@Inject etc)注释是由AutowiredAnnotationBeanPostProcessor处理的。它解析并设置用@Autowired注释的字段和setter,但构造函数呢?这是bean后处理器,这意味着它是在已经创建bean之后调用的,但是构造函数也可以标记为@Autowired,那么如何创建这样的bean呢?

  • 问题内容: 我一直在做大学项目的作业。有一次,当您实际上可以使用构造函数方法来实现相同的结果时,我对于getter和setter的实际使用感到困惑。我已经搜索并找到许多答案,但没有令人满意的解释。我有如下laptop.java 和laoptopRecords.java调用构造函数为 在这里,我没有使用getter和setter方法,并且为每个便携式计算机对象都获得了理想的结果。 如果我以如下方式在

  • 问题内容: Animal animal = new Animal(101); //Constructor is executed. 问题答案: 类中给定方法的默认实现不调用任何构造函数。 它创建对象的“浅表副本”,因为它通过创建新实例然后通过分配复制内容来创建对象的副本,这意味着 如果您的Class包含可变字段,则原始对象和克隆都将引用同一内部对象 。 尝试看看此页面。

  • 此程序成功编译并显示以下输出。 问题 a)我不明白为什么alpha的构造函数没有首先被执行。 我相信“super()”会首先被每个子构造函数隐式调用...对吗?。 b)如果beta的构造函数已经执行,那么为什么打印“5”?(输出中的第二行) 第三行我有点理解(即alpha自己的变量将显示出来,因为还没有对“a”实例变量进行强制转换)