作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个扩展基本服务的 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/
我是一名优秀的程序员,十分优秀!