我創建了一些類和一個如下所示的介面。這算是DI嗎?或者這不是因為我做了
new TalkingClockApplication(new TalkingClock());?如果不是,我想知道如何將其設為 DI。(不帶彈簧靴)
當我注釋掉new TalkingClockApplication(new TalkingClock());并運行 TalkingClockApplication 時,它說“com.XXX.TalkingClockApplication.convertTime”為空。
public interface ConvertTime {
String convertTime(int hours, int minutes);
}
和
public class TalkingClock implements ConvertTime {
@Override
public String convertTime(int hours, int minutes) {
// do something
return value;
}
}
和
public class TalkingClockApplication {
public ConvertTime convertTime;
public TalkingClockApplication(ConvertTime convertTime) {
this.convertTime = convertTime;
}
public static void main( String[] args ) throws Exception {
String friendlyText = "";
TalkingClockApplication aa = new TalkingClockApplication(new TalkingClock());
int hours = Integer.parseInt(strings[0]);
int minutes = Integer.parseInt(strings[1]);
friendlyText = aa.convertTime.convertTime(hours, minutes);
System.out.println( friendlyText );
}
}
uj5u.com熱心網友回復:
Spring 不支持對靜態欄位的依賴注入,因此要么ConvertTime將其設為非靜態欄位,要么將其注入到非靜態欄位中,然后將其分配給該靜態欄位。
uj5u.com熱心網友回復:
當您查看https://en.wikipedia.org/wiki/Dependency_injection并將其與您的解決方案進行比較時,您會發現您實作了大部分部分(服務、客戶端和介面),正如那里描述的那樣。
但是缺少一部分:在談論依賴注入時,通常還有一個注入器負責提供實作。
因此,您可以實作一個注入器,該注入器負責創建實體并注入所需的元素。(因此,將該部分從 main 方法中移到您的 Injector 中可能就足夠了,然后您只需呼叫 Injector 來獲取您的 TalkinClockApplication 實體。)
uj5u.com熱心網友回復:
在您的代碼中:TalkingClockApplication aa = new TalkingClockApplication(new TalkingClock());您已經在做,DI因為您正在通過 a 傳遞您的依賴項constructor。而且你正在使用polymorphism它幫助你傳遞任何實作的型別ConvertTime
當然,您可以不用DI,spring但spring為您提供的是自動提供您需要的實作的能力,因為您知道您無法interface在此處實體化,TalkingClock
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/343375.html
