依賴注入(Dependency Injection,DI)可以通過(guò)以下三種方式實(shí)現(xiàn):
1.構(gòu)造函數(shù)注入(Constructor Injection):通過(guò)在類的構(gòu)造函數(shù)中聲明依賴項(xiàng),容器會(huì)在創(chuàng)建類的實(shí)例時(shí)將依賴項(xiàng)傳遞給構(gòu)造函數(shù)。例如:
kotlinCopy codepublic class MyService {
private final MyDependency myDependency;
public MyService(MyDependency myDependency) {
this.myDependency = myDependency;
}
// 使用 MyDependency
}
2.屬性注入(Property Injection):通過(guò)在類中聲明依賴項(xiàng)的屬性,并提供一個(gè)設(shè)置依賴項(xiàng)屬性的方法,容器會(huì)在創(chuàng)建類的實(shí)例后,通過(guò)反射或其他方式設(shè)置依賴項(xiàng)的屬性。例如:
public class MyService {
private MyDependency myDependency;
public void setMyDependency(MyDependency myDependency) {
this.myDependency = myDependency;
}
// 使用 MyDependency
}
3.方法注入(Method Injection):通過(guò)在類中聲明一個(gè)設(shè)置依賴項(xiàng)的方法,容器會(huì)在創(chuàng)建類的實(shí)例后調(diào)用該方法并將依賴項(xiàng)傳遞給它。例如:
public class MyService {
private MyDependency myDependency;
public void setMyDependency(MyDependency myDependency) {
this.myDependency = myDependency;
}
public void doSomething() {
// 使用 MyDependency
}
}
無(wú)論使用哪種方式,依賴項(xiàng)的創(chuàng)建和維護(hù)都是由外部容器負(fù)責(zé),以減少對(duì)象之間的緊耦合性和提高可重用性。通常,依賴注入模式使用第三方依賴注入框架來(lái)管理依賴項(xiàng)。常見(jiàn)的依賴注入框架包括Spring、Guice、Dagger等。