??一、依賴注入的原理是什么,為什么要用依賴注入?
??1.依賴注入(Dependency Injection,DI)
是一種設(shè)計(jì)模式和編程技術(shù),其原理是將對象的依賴關(guān)系由外部容器來管理和注入。它的目的是解耦組件之間的依賴關(guān)系,提高代碼的靈活性、可維護(hù)性和可測試性。
??2.依賴注入的原理
是通過在對象的構(gòu)造函數(shù)、屬性或方法中注入所依賴的對象,而不是在對象內(nèi)部創(chuàng)建或獲取依賴對象。這樣,對象的依賴關(guān)系由外部容器來管理,對象只需要關(guān)注自身的核心功能,而不需要關(guān)心如何獲取依賴對象。
??3.依賴注入的主要目的
是實(shí)現(xiàn)控制反轉(zhuǎn)(Inversion of Control,IoC),即將對象的創(chuàng)建、組裝和依賴關(guān)系的管理交給外部容器來負(fù)責(zé)。通過使用依賴注入,可以實(shí)現(xiàn)以下好處:
(1)解耦對象之間的依賴關(guān)系:對象不再負(fù)責(zé)創(chuàng)建或獲取依賴對象,而是通過注入的方式來獲取所需的依賴對象,從而降低了對象之間的耦合性。
(2)提高代碼的可測試性:依賴注入使得在測試過程中可以輕松替換依賴對象,從而實(shí)現(xiàn)針對單個組件的獨(dú)立測試,減少了對外部資源的依賴,使得測試更加簡單和可靠。
(3)提高代碼的靈活性和可維護(hù)性:通過外部容器來管理依賴關(guān)系,可以更靈活地配置和組裝對象,便于修改、擴(kuò)展和維護(hù)代碼。
總結(jié)來說,依賴注入的原理是通過將對象的依賴關(guān)系由外部容器來管理和注入,從而解耦組件之間的依賴關(guān)系,提高代碼的靈活性、可維護(hù)性和可測試性。使用依賴注入可以使代碼更清晰、可讀性更高,并且更易于單元測試和擴(kuò)展。
??二、依賴注入有哪幾種方法?
??1、構(gòu)造函數(shù)注入(Constructor Injection):
通過在對象的構(gòu)造函數(shù)中接收所需的依賴對象來進(jìn)行注入。在創(chuàng)建對象時,將依賴對象作為參數(shù)傳遞給構(gòu)造函數(shù),對象在創(chuàng)建完成后就具備了所需的依賴對象。這種方式可以保證對象的依賴在創(chuàng)建時就被滿足,并且使得對象的依賴關(guān)系清晰明確。
(1)首先,創(chuàng)造一個類,配置bean.xml文件
<bean id="bookCon" class="com.itguigu.spring6.iocxml.di.Book">
<constructor-arg name="name" value="后端"></constructor-arg>
</bean>
(2)在bean標(biāo)簽內(nèi)部使用 constructor-arg標(biāo)簽
??type屬性:使用類型指定構(gòu)造方法中參數(shù)的類型
??index屬性:使用構(gòu)造方法中參數(shù)索引值來 進(jìn)行注入
?? name屬性 :使用構(gòu)造方法中參數(shù)名稱 來注入 ( 常用!)
??value屬性:要注入的值(基本數(shù)據(jù)類型和String類型)
??ref屬性:要注入的值(引用在IOC容器中其他的bean對象)
??2、Setter方法注入(Setter Injection):
必須要有一個無參的構(gòu)造方法,否則只能用構(gòu)造方法構(gòu)造
通過提供一組Setter方法,將依賴對象通過Setter方法進(jìn)行注入。在對象創(chuàng)建完成后,通過調(diào)用相應(yīng)的Setter方法來設(shè)置依賴對象。這種方式使得對象的依賴可以在創(chuàng)建后的任意時刻進(jìn)行注入,具有更大的靈活性。
Setter方法注入的原理步驟如下:
??(1)定義對象的依賴屬性:在目標(biāo)對象中定義一個或多個私有屬性,用于存儲依賴對象的引用。
??(2)提供Setter方法:為每個依賴屬性提供對應(yīng)的公共Setter方法,用于接收依賴對象的實(shí)例。
??(3)創(chuàng)建目標(biāo)對象實(shí)例:通過實(shí)例化目標(biāo)對象的類,創(chuàng)建目標(biāo)對象的實(shí)例。
??(4)獲取依賴對象:從外部獲取依賴對象的實(shí)例,可以是通過容器或其他方式。
??(5)調(diào)用Setter方法:將依賴對象的實(shí)例作為參數(shù),調(diào)用目標(biāo)對象的Setter方法進(jìn)行注入。在調(diào)用Setter方法時,目標(biāo)對象會將依賴對象的引用存儲到對應(yīng)的依賴屬性中。
(6)使用目標(biāo)對象:完成依賴注入后,可以通過目標(biāo)對象的其他方法或?qū)傩詠硎褂米⑷氲囊蕾噷ο蟆?mark hidden color="red">文章來源:http://www.zghlxwxcb.cn/news/detail-480417.html
創(chuàng)造一個類,配置bean.xml文件
public Book(){
System.out.println("無參數(shù)構(gòu)造執(zhí)行.......");
}
public Book(String name, String author) {
System.out.println("有參數(shù)構(gòu)造執(zhí)行.......");
this.name = name;
this.author = author;
}
<bean id="book" class="com.itguigu.spring6.iocxml.di.Book">
<property name="name" value="前端"></property>
<property name="author" value="嘎嘎"></property>
<property name="others" value="<<"></property>
</bean>
??3、接口注入(Interface Injection):
在對象的接口中定義一個用于接收依賴對象的方法,并由外部容器來調(diào)用該方法進(jìn)行注入。接口注入需要對象實(shí)現(xiàn)一個特定的接口,外部容器通過該接口的方法來注入依賴對象。這種方式較少使用,因?yàn)樾枰獙ο髮?shí)現(xiàn)額外的接口。文章來源地址http://www.zghlxwxcb.cn/news/detail-480417.html
到了這里,關(guān)于spring——依賴注入原理及注入方式的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!