gpt4 book ai didi

java - 带服务注入(inject)的 spring 链接构造函数

转载 作者:行者123 更新时间:2023-12-02 04:37:12 26 4
gpt4 key购买 nike

我正在上课,就像这样

public class testClass {
private TestService testService;

public testClass() {
this(testService);
}

@Autowired(required = true)
public testClass(TestService testService) {
this.testService = testService;
}
}

其中默认的无参数构造函数是强制性的,因为我有一个结构化工厂设计,从那里我调用我的无参数构造函数,所以我不想更改这个结构。因此,我使用链接构造函数默认构造函数调用带参数的构造函数。但是java抛出异常

在调用父类(super class)型构造函数之前无法引用 testService,

我可以通过将 testService 设置为 static 来解决此异常,但来自 here ,我认为静态注入(inject)并不总是一个好主意。

有人可以建议我一些设计解决方案,说明如何在不进行静态注入(inject)的情况下从默认构造函数解决或调用这个有参数的​​构造函数

最佳答案

您有两个选择:

场注入(inject)

向字段添加 @Autowired 注释,并丢弃带参数的构造函数。

Spring 将使用反射注入(inject)依赖项。如果像您的示例中那样,后面的默认构造函数是空的,并且是唯一的构造函数,您也可以将其丢弃,因为 java 编译器将为您创建它。

优点:短代码

构造函数注入(inject)扔掉无参数构造函数。 Spring 会很好地提供依赖关系。

优点:您的代码在没有 Spring 的情况下也可以正常工作,这对于测试来说非常有用。 Here is a more detailed explanation why I prefer this variation .

一些补充评论:

  • 始终以首字母大写命名类。其他一切都会让 Java 开发人员难以阅读您的代码。

  • 你们那里根本没有工厂。在 Spring 中使用工厂有多种方式,如果您有兴趣,请查找。

关于java - 带服务注入(inject)的 spring 链接构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30611039/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com