Spring核心之IOC與bean超詳細(xì)講解
前言
Spring是一個(gè)開(kāi)源框架 它能夠降低開(kāi)發(fā)企業(yè)應(yīng)用程序的復(fù)雜性 它以IOC(控制反轉(zhuǎn))和AOP(面向切面編程)兩種先進(jìn)的技術(shù)為基礎(chǔ) 完美地簡(jiǎn)化了企業(yè)級(jí)開(kāi)發(fā)的復(fù)雜度
一、Spring的簡(jiǎn)介和獲取
Spring有七大模塊
1:核心模塊
Spring Core模塊是Spring的核心容器 它實(shí)現(xiàn)了IOC模式 提供了Spring框架的基礎(chǔ)功能,在模塊中包含最重要的BeanFactory類是Spring的核心類 負(fù)責(zé)對(duì)JavaBean的配置與管理
2:Context模塊
Spring Context模塊繼承BeanFactory類并且添加了事件處理 國(guó)際化 資源裝載 透明裝載等功能
3:AOP模塊
Spring集成了所有AOP功能 通過(guò)事務(wù)管理可以使任意Spring管理的對(duì)象AOP化
4:DAO模塊
提供了JDBC的抽象層 簡(jiǎn)化了數(shù)據(jù)庫(kù)廠商的異常錯(cuò)誤
5:O/R模塊
提供了對(duì)現(xiàn)有ORM框架的支持
6:Web模塊
Spring Web模塊建立在Spring Context基礎(chǔ)之上 它提供了Servlet監(jiān)聽(tīng)器的Context和Web應(yīng)用的上下文
7:MVC模塊
Spring Web MVC模塊建立在Spring核心功能之上 使得它擁有Spring框架的所有特性
Spring的獲取
Spring內(nèi)置了日志組件log4.jar 所以在正式使用Spring之前需要對(duì)log4j進(jìn)行簡(jiǎn)單的配置
在項(xiàng)目的src根目錄下創(chuàng)建log4j.properties屬性文件 代碼如下
log4j.rootLogger=WARN,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d%p[[%c]-%m%n
Spring配置結(jié)構(gòu)如下
使用BeanFactory管理Bean
以裝載Bean為例 代碼如下
Resource resource=new ClassPathResource("applicationContext.xml"); BeanFactory factory=new XmlBeanFactory(resource); Test test=(Test)factory.getBean("test");
AplicationContext的應(yīng)用
在Spring中大多采用AplicationContext容器來(lái)開(kāi)發(fā)企業(yè)級(jí)的程序 接下來(lái)介紹它的三個(gè)實(shí)現(xiàn)類
1:ClassPathXmlApplicationContext類
它從當(dāng)前類路徑中檢索配置文件并裝載它來(lái)創(chuàng)建容器的實(shí)例
ApplicationContext context=new ClassPathXmlApplicationContext(String configLocation);
2:FileSystemXmlApplicationContext類
它和上面的區(qū)別在于讀取Spring配置文件的方式 它不再?gòu)念惵窂街蝎@取配置文件 而是通過(guò)參數(shù)指定配置文件的位置
ApplcationContext context=new FileSystemXmlApplicationContext(String configLocation);
4:WebApplicationContext類
它是Spring的Web應(yīng)用容器
二、依賴注入與IOC
什么是控制反轉(zhuǎn)與依賴注入?
IOC 控制反轉(zhuǎn) 它使程序組件或類之間盡量形成一種松耦合的結(jié)構(gòu),開(kāi)發(fā)者在使用類的實(shí)例之前,需要先創(chuàng)建類的實(shí)例,但是IOC將創(chuàng)建實(shí)例的任務(wù)交給IOC容器,這樣開(kāi)發(fā)應(yīng)用代碼時(shí)只需要直接使用類的實(shí)例 這就是IOC
依賴注入有三種形式 Spring支持后兩種
1、接口注入
基于接口將調(diào)用與實(shí)現(xiàn)分離
2、Setter注入
基于JavaBean的Setter方法為屬性賦值 在實(shí)際開(kāi)發(fā)中得到了最廣泛的應(yīng)用
public class User{ private String name; public String getName(){ return name; } public void setName(String name){ this.name=name; } }
3、構(gòu)造器注入
基于構(gòu)造方法為屬性賦值 容器通過(guò)調(diào)用類的構(gòu)造方法 將其所需的依賴關(guān)系注入其中
public class User{ private String name; public User(String name){ this.name=name; } }
bean的配置
<bean id="test" class="com.mr.Test"/>
id屬性為bean的名稱 class屬性為對(duì)應(yīng)的類名
引用其他的bean
在Spring中可以通過(guò)配置文件使用<ref>元素引用其他的JavaBean的實(shí)例對(duì)象
<ref local="user"/>
三、自動(dòng)裝配
<bean>元素的autowise屬性負(fù)責(zé)自動(dòng)裝備<bean>標(biāo)簽定義的JavaBaen的屬性 這樣做可以省去很多配置JavaBean屬性的標(biāo)簽代碼
1、按Bean名稱裝配
<bean>元素的byname屬性以屬性名區(qū)分自動(dòng)裝配,在容器中尋找與JavaBean的屬性名相同的JavaBean并將其自動(dòng)裝配到JavaBean中
<bean auotwise="byName" id="printInfo" class="com.mr.user.PringInfo"/>
2、按bean類型裝配
Spring以bean類型區(qū)分自動(dòng)裝配 容器會(huì)自動(dòng)尋找與JavaBean屬性類型相同的JavaBean的定義 并將其注入到需要自動(dòng)裝配的JavaBean中
<bean auotwise="byType" id="printInfo" class="com.mr.user.PringInfo"/>
四、bean的作用域
在Spring中,那些組成應(yīng)用的主題及由Spring IOC容器所管理的對(duì)象被稱為bean,簡(jiǎn)單地講,bean就是由Spring容器初始化,裝備及被管理的對(duì)象
1、singleton的作用域
當(dāng)Spring中一個(gè)bean作用域?yàn)閟ingleton時(shí),那么Spring IOC容器中只會(huì)存在一個(gè)共享的該bean實(shí)例,并且所有對(duì)該bean的引用 只要id與該bean定義相匹配,則只會(huì)返回bean的單一實(shí)例
<bean id="test" class="com.mr.Test"/> <bean id="test" class="com.mr.Test"/ singleton="true"/> <bean id="test" class="com.mr.Test"/scope="singleton"/>
2、prototype作用域
prototype作用域的bean會(huì)導(dǎo)致在每次對(duì)該bean請(qǐng)求時(shí)都會(huì)創(chuàng)建一個(gè)新的bean實(shí)例,
對(duì)所有有狀態(tài)的bean應(yīng)該使用prototype作用域 無(wú)狀態(tài)的bean應(yīng)該使用singleton作用域
<bean id="test" class="com.mr.Test" singleton="false"/> <bean id="test" class="com.mr.Test" scope="prototype"/>
到此這篇關(guān)于Spring核心之IOC與bean超詳細(xì)講解的文章就介紹到這了,更多相關(guān)Spring IOC與bean內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
走進(jìn)SpringBoot之配置文件與多環(huán)境詳解
這篇文章主要介紹了走進(jìn)SpringBoot之配置文件與多環(huán)境,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05SpringBoot集成Graphql Query實(shí)戰(zhàn)示例
這篇文章主要為大家介紹了SpringBoot集成Graphql Query實(shí)戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09maven中配置項(xiàng)目的jdk版本無(wú)效的排查方式
這篇文章主要介紹了maven中配置項(xiàng)目的jdk版本無(wú)效的排查方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04SpringBoot任務(wù)調(diào)度器的實(shí)現(xiàn)代碼
SpringBoot自帶了任務(wù)調(diào)度器,通過(guò)注解的方式使用。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12SpringBoot獲取當(dāng)前運(yùn)行環(huán)境三種方式小結(jié)
在使用SpringBoot過(guò)程中,我們只需要引入相關(guān)依賴,然后在main方法中調(diào)用SpringBootApplication.run(應(yīng)用程序啟動(dòng)類.class)方法即可,那么SpringBoot是如何獲取當(dāng)前運(yùn)行環(huán)境呢,接下來(lái)由小編給大家介紹一下SpringBoot獲取當(dāng)前運(yùn)行環(huán)境三種方式,需要的朋友可以參考下2024-01-01Java數(shù)組的遍歷與求和知識(shí)點(diǎn)
本篇文章給大家總計(jì)了Java數(shù)組的遍歷與求和的知識(shí)點(diǎn)以及需要注意的地方,需要的朋友參考學(xué)習(xí)下。2018-02-02Java中jar包運(yùn)行后顯示:沒(méi)有主清單屬性的解決方案
這篇文章主要介紹了Java中jar包運(yùn)行后顯示:沒(méi)有主清單屬性的解決方案,文中給大家分析了三個(gè)主要原因,并通過(guò)代碼示例和圖文講解的非常詳細(xì),需要的朋友可以參考下2024-04-04輕松理解Java面試和開(kāi)發(fā)中的IoC(控制反轉(zhuǎn))
在Java開(kāi)發(fā)中,IoC意 味著將你設(shè)計(jì)好的類交給系統(tǒng)去控制,而不是在你的類內(nèi)部控制。這稱為控制反轉(zhuǎn)。下文給大家介紹Java面試和開(kāi)發(fā)中的IoC(控制反轉(zhuǎn))知識(shí),需要的朋友參考下吧2017-07-07