gpt4 book ai didi

java - 如何在 Spring 的构造函数中提供新的类实例?

转载 作者:行者123 更新时间:2023-11-30 03:47:59 26 4
gpt4 key购买 nike

我有一个扩展基本服务的 Spring 托管类。我想以任何实现类都必须提供特定的 FileAnalyzer 实例的方式编写基本服务。但我不想让 FileAnalyzer 类由 spring 管理。

这可能吗?由于 super() 类始终必须是构造函数中的第一个调用,因此我无法在调用基本构造函数之前实例化任何类。

示例:

public abstract class BaseService {
BaseService(FileAnalyzer analyzer, String path) {
this.path = path;
//perform any action with analyzer.
}
}


@Service
public class TextfileService {
public TextfileService() {
//ERROR: super() must be first call in constructor
FileAnalyzer analyzer = new FileAnalyzer();
analyzer.configure(..);
super(analyzer, "c:\logs");
}
}

最佳答案

It that possible? Because a super() class always has to be the first call in a constructor

是的,这是可能的。只需将代码移至 private static 方法中,然后从 super() 调用内部调用即可。

@Service
public class TextfileService {
public TextfileService() {
super(getFileAnalyzer(), "c:\logs");
}
}

private static FileAnalyzer getFileAnalyzer(){
FileAnalyzer analyzer = new FileAnalyzer();
analyzer.configure(..);
return analyzer;
}
<小时/>

替代方式:

如果FileAnalyzer是您编写的自定义类,则只需更改configure()方法的返回类型,如下所示:

@Service
public class TextfileService {
public TextfileService() {
super(new FileAnalyzer().configure(...), "c:\logs");
}
}

文件分析器.java

public FileAnalyzer configure(){
...
return this;
}

关于java - 如何在 Spring 的构造函数中提供新的类实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25136935/

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