在尝试理解依赖注入原理时,我遇到了这个我无法理解的例子
abstract class ExternalInvestmentBase {
private static ExternalInvestmentBase sImpl;
protected ExternalInvestmentBase() {
sImpl = this;
}
public static String supply(String request) throws Exception {
return sImpl.supplyImpl(request);
}
abstract String supplyImpl(String request)
throws Exception;
}
class InvestmentUtil extends ExternalInvestmentBase {
public static void init() {
new InvestmentUtil();
}
@Override
public String supplyImpl(String request) throws Exception {
return "This is possible";
}
}
public class IExternalInvestment {
public static void main(String[] args) throws Exception {
InvestmentUtil.init();
String rv = ExternalInvestmentBase.supply("tt");
System.out.println(rv);
}
}
主要问题是
- 基类中的"this"关键字如何工作?
ExternalInvestmentBase.supply("tt");
是如何访问对象的?
关键字"this"是指您当前的对象。类 ExternalInvestmentBase 被分配给 sImpl 作为一个对象。以下是甲骨文文档对其含义的解释: https://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html 我不确定为什么代码以这种方式使用它,对我来说这似乎很奇怪。
因为你有sImpl持有ExternalInvestmentBase作为一个对象,所以newExternalInvestmentBase方法应该在sImpl上调用supplymethod。这就是ExternalInvestmentBase.supply("tt"(的方式;应访问该对象。 不能使用方法 ExternalInvestmentBase.supply,因为它是从静态上下文调用的非静态方法。这将导致编译错误。
本文介绍了正确的依赖项注入:https://www.javatpoint.com/dependency-injection-in-spring