spring依賴(lài)注入深入理解
IOC&&DI
IOC(Inversion of Control)一般分為兩種類(lèi)型:依賴(lài)注入DI(Dependency Injection)和依賴(lài)查找(Dependency Lookup)
org.springframework.beans.factory.BeanFactory是IOC容器的具體實(shí)現(xiàn),是Spring IOC容器的核心接口
Spring IOC負(fù)責(zé)創(chuàng)建對(duì)象,管理對(duì)象,裝配對(duì)象,配置對(duì)象,并且管理這些對(duì)象的整個(gè)生命周期。
優(yōu)點(diǎn):把應(yīng)用的代碼量降到最低。最小代價(jià)和最小侵入式是松散耦合得以實(shí)現(xiàn)。IOC容器支持加載服務(wù)時(shí)的餓漢式初始化和懶加載
DI依賴(lài)注入是IOC的一個(gè)方面,不需要?jiǎng)?chuàng)建對(duì)象,只需描述如何被創(chuàng)建,在配置文件中描述組件需要哪些服務(wù),之后IOC容器進(jìn)行組裝
IOC的注入方式:1、構(gòu)造器依賴(lài)注入 2、Setter方法注入 3、工廠(chǎng)方法注入(很少使用)
Setter方法注入
通過(guò)Setter方法注入bean的屬性值或依賴(lài)的對(duì)象,是最常用的注入方式
<!-- property來(lái)配置屬性 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來(lái)指定參數(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)造器的話(huà),只使用index索引方式無(wú)法進(jìn)行精確匹配,還需要使用類(lèi)型type來(lái)進(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依賴(lài)注入深入理解的文章就介紹到這了,更多相關(guān)spring依賴(lài)注入內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Data JPA 之 JpaRepository的使用
這篇文章主要介紹了Spring Data JPA 之 JpaRepository的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
16個(gè)SpringBoot擴(kuò)展接口的總結(jié)和實(shí)例
Spring Boot是一個(gè)開(kāi)源的Java框架,它簡(jiǎn)化了基于Spring的應(yīng)用程序的開(kāi)發(fā)和部署,它提供了許多強(qiáng)大的特性和擴(kuò)展接口,本文給大家介紹了16個(gè)常用的Spring Boot擴(kuò)展接口,需要的朋友可以參考下2023-09-09
Java結(jié)合uniapp實(shí)現(xiàn)驗(yàn)證碼功能的示例詳解
UniApp 是一個(gè)基于 Vue.js 的跨平臺(tái)應(yīng)用開(kāi)發(fā)框架,允許開(kāi)發(fā)者使用統(tǒng)一的代碼庫(kù)來(lái)構(gòu)建多平臺(tái)應(yīng)用,這篇文章將給大家介紹Java結(jié)合uniapp實(shí)現(xiàn)驗(yàn)證碼功能,文中通過(guò)詳細(xì)的代碼示例講解的非常詳細(xì),需要的朋友可以參考下2024-07-07
SpringSessionRedis配置及發(fā)現(xiàn)的問(wèn)題講解
今天小編就為大家分享一篇關(guān)于SpringSessionRedis配置及發(fā)現(xiàn)的問(wèn)題講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03
mybatis自動(dòng)掃描和自定義類(lèi)注解方式
這篇文章主要介紹了mybatis自動(dòng)掃描和自定義類(lèi)注解方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
spring-boot-starter-thymeleaf加載外部html文件方式
本文介紹了在SpringMVC中使用Thymeleaf模板引擎加載外部HTML文件的方法,以及在Spring Boot中使用Thymeleaf的基本步驟,包括引入依賴(lài)、創(chuàng)建Controller、創(chuàng)建HTML文件、參數(shù)化訪(fǎng)問(wèn)、熱加載和熱更新文件2025-02-02
mybatis條件語(yǔ)句中帶數(shù)組參數(shù)的處理
這篇文章主要介紹了mybatis條件語(yǔ)句中帶數(shù)組參數(shù)的處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09

