spring依賴注入深入理解
IOC&&DI
IOC(Inversion of Control)一般分為兩種類型:依賴注入DI(Dependency Injection)和依賴查找(Dependency Lookup)
org.springframework.beans.factory.BeanFactory是IOC容器的具體實(shí)現(xiàn),是Spring IOC容器的核心接口
Spring IOC負(fù)責(zé)創(chuàng)建對象,管理對象,裝配對象,配置對象,并且管理這些對象的整個生命周期。
優(yōu)點(diǎn):把應(yīng)用的代碼量降到最低。最小代價(jià)和最小侵入式是松散耦合得以實(shí)現(xiàn)。IOC容器支持加載服務(wù)時(shí)的餓漢式初始化和懶加載
DI依賴注入是IOC的一個方面,不需要創(chuàng)建對象,只需描述如何被創(chuàng)建,在配置文件中描述組件需要哪些服務(wù),之后IOC容器進(jìn)行組裝
IOC的注入方式:1、構(gòu)造器依賴注入 2、Setter方法注入 3、工廠方法注入(很少使用)
Setter方法注入
通過Setter方法注入bean的屬性值或依賴的對象,是最常用的注入方式
<!-- property來配置屬性 name為屬性名 value為屬性值 --> <bean id="helloWorld" class="com.zhanghe.study.spring4.beans.helloworld.HelloWorld"> <property name="name" value="Spring Hello"/> </bean>
構(gòu)造器注入
構(gòu)造器注入需要提供相應(yīng)的構(gòu)造器
<!-- 可以使用index來指定參數(shù)的順序,默認(rèn)是按照先后順序 --> <bean id="car" class="com.zhanghe.study.spring4.beans.beantest.Car"> <constructor-arg value="法拉利" index="0"/> <constructor-arg value="200" index="1"/> </bean>
但是如果存在重載的構(gòu)造器的話,只使用index索引方式無法進(jìn)行精確匹配,還需要使用類型type來進(jìn)行區(qū)分,index和type可以搭配使用
public Car(String brand, double price) { this.brand = brand; this.price = price; } public Car(String brand, int speed) { this.brand = brand; this.speed = speed; }
<bean id="car" class="com.zhanghe.study.spring4.beans.beantest.Car"> <constructor-arg value="法拉利" index="0"/> <constructor-arg value="20000.0" type="double"/> </bean> <bean id="car2" class="com.zhanghe.study.spring4.beans.beantest.Car"> <constructor-arg value="瑪莎拉蒂" index="0"/> <constructor-arg value="250" type="int"/> </bean>
到此這篇關(guān)于spring依賴注入深入理解的文章就介紹到這了,更多相關(guān)spring依賴注入內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot中的server.context-path的實(shí)現(xiàn)
本文主要介紹了SpringBoot中的server.context-path的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08RocketMQ消息隊(duì)列實(shí)現(xiàn)隨機(jī)消息發(fā)送當(dāng)做七夕禮物
這篇文章主要為大家介紹了RocketMQ消息隊(duì)列實(shí)現(xiàn)隨機(jī)消息發(fā)送當(dāng)做七夕禮物,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08MyBatis-Plus多數(shù)據(jù)源的示例代碼
本文主要介紹了MyBatis-Plus多數(shù)據(jù)源的示例代碼,包括依賴配置、數(shù)據(jù)源配置、Mapper 和 Service 的定義,具有一定的參考價(jià)值,感興趣的可以了解一下2024-05-05Idea使用插件實(shí)現(xiàn)逆向工程搭建SpringBoot項(xiàng)目的圖文教程
這篇文章主要介紹了Idea使用插件實(shí)現(xiàn)逆向工程搭建SpringBoot項(xiàng)目,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06在Linux系統(tǒng)上升級Java版本的兩種方法步驟
由于項(xiàng)目升級,需要將JDK7升級到JDK8,升級JDK的同時(shí)也要升級一些其他的版本,下面這篇文章主要給大家介紹了關(guān)于在Linux系統(tǒng)上升級Java版本的兩種方法步驟,需要的朋友可以參考下2024-09-09