十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
1 BeanFactory與ApplicationContext區(qū)別
BeanFactory是Spring框架中IoC容器的頂層接?,它只是?來定義?些基礎功能,定義?些基礎規(guī)范,?ApplicationContext是它的?個?接?,所以ApplicationContext是具備BeanFactory提供的全部功能的。
通常,我們稱BeanFactory為SpringIOC的基礎容器,ApplicationContext是容器的?級接?,?BeanFactory要擁有更多的功能,?如說國際化?持和資源訪問(xml,java配置類)等等
啟動 IoC 容器的?式:
* Java環(huán)境下啟動IoC容器
①ClassPathXmlApplicationContext:從類的根路徑下加載配置?件(推薦使?)
②FileSystemXmlApplicationContext:從磁盤路徑上加載配置?件
③AnnotationConfigApplicationContext:純注解模式下啟動Spring容器
* Web環(huán)境下啟動IoC容器
①從xml啟動容器
Archetype Created Web Application
contextConfigLocation
classpath:applicationContext.xml
org.springframework.web.context.ContextLoaderListener
②從配置類啟動容器
Archetype Created Web Application
contextClass
org.springframework.web.context.support.AnnotationConfigWebAppli
cationContext
contextConfigLocation
com.lagou.edu.SpringConfig
org.springframework.web.context.ContextLoaderListener
2 純xml模式
xml ?件頭
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
實例化Bean的三種?式
?式?:使??參構(gòu)造函數(shù)
在默認情況下,它會通過反射調(diào)??參構(gòu)造函數(shù)來創(chuàng)建對象。如果類中沒有?參構(gòu)造函數(shù),將創(chuàng)建失敗。
?式?:使?靜態(tài)?法創(chuàng)建
在實際開發(fā)中,我們使?的對象有些時候并不是直接通過構(gòu)造函數(shù)就可以創(chuàng)建出來的,它可能在創(chuàng)建的過程 中會做很多額外的操作。此時會提供?個創(chuàng)建對象的?法,恰好這個?法是static修飾的?法,即是此種情 況。
例如,我們在做Jdbc操作時,會?到java.sql.Connection接?的實現(xiàn)類,如果是mysql數(shù)據(jù)庫,那么?的就 是JDBC4Connection,但是我們不會去寫 JDBC4Connection connection = new JDBC4Connection() ,因 為我們要注冊驅(qū)動,還要提供URL和憑證信息,? DriverManager.getConnection ?法來獲取連接。
?式三:使?實例化?法創(chuàng)建
此種?式和上?靜態(tài)?法創(chuàng)建其實類似,區(qū)別是?于獲取對象的?法不再是static修飾的了,?是類中的? 個普通?法。此種?式?靜態(tài)?法創(chuàng)建的使??率要??些。
在早期開發(fā)的項?中,??類中的?法有可能是靜態(tài)的,也有可能是?靜態(tài)?法,當是?靜態(tài)?法時,即可 采?下?的配置?式:
3.Bean的X及?命周期
作?范圍的改變
在spring框架管理Bean對象的創(chuàng)建時,Bean對象默認都是單例的,但是它?持配置的?式改
變作?范圍。作?范圍官?提供的說明如下圖:
在上圖中提供的這些選項中,我們實際開發(fā)中?到最多的作?范圍就是singleton(單例模式)和prototype(原型模式,也叫多例模式)。配置?式參考下?的代碼:
不同作?范圍的?命周期
單例模式:singleton
對象出?:當創(chuàng)建容器時,對象就被創(chuàng)建了。
對象活著:只要容器在,對象?直活著。
對象死亡:當銷毀容器時,對象就被銷毀了。
?句話總結(jié):單例模式的bean對象?命周期與容器相同。
多例模式:prototype
對象出?:當使?對象時,創(chuàng)建新的對象實例。
對象活著:只要對象在使?中,就?直活著。
對象死亡:當對象?時間不?時,被java的垃圾回收器回收了。
?句話總結(jié):多例模式的bean對象,spring框架只負責創(chuàng)建,不負責銷毀。
Bean標簽屬性
在基于xml的IoC配置中,bean標簽是最基礎的標簽。它表示了IoC容器中的?個對象。換句話說,如果?個對象想讓spring管理,在XML的配置中都需要使?此標簽配置,Bean標簽的屬性如下:
id屬性: ?于給bean提供?個唯?標識。在?個標簽內(nèi)部,標識必須唯?。
class屬性:?于指定創(chuàng)建Bean對象的全限定類名。
name屬性:?于給bean提供?個或多個名稱。多個名稱?空格分隔。
factory-bean屬性:?于指定創(chuàng)建當前bean對象的??bean的唯?標識。當指定了此屬性之后,class屬性失效。
factory-method屬性:?于指定創(chuàng)建當前bean對象的???法,如配合factory-bean屬性使?,則class屬性失效。如配合class屬性使?,則?法必須是static的。
scope屬性:?于指定bean對象的作?范圍。通常情況下就是singleton。當要?到多例模式時,可以配置為prototype。 init-method屬性:?于指定bean對象的初始化?法,此?法會在bean對象裝配后調(diào)?。必須是?個?參?法。
destory-method屬性:?于指定bean對象的銷毀?法,此?法會在bean對象銷毀前執(zhí)?。它只能為scope是singleton時起作?。
4.DI 依賴注?的xml配置
依賴注?分類
按照注?的?式分類
構(gòu)造函數(shù)注?:顧名思義,就是利?帶參構(gòu)造函數(shù)實現(xiàn)對類成員的數(shù)據(jù)賦值。
set?法注?:它是通過類成員的set?法實現(xiàn)數(shù)據(jù)的注?。(使?最多的)
依賴注?的配置實現(xiàn)之構(gòu)造函數(shù)注? 顧名思義,就是利?構(gòu)造函數(shù)實現(xiàn)對類成員的賦值。它的使?要求是,類中提供的構(gòu)造函數(shù)參數(shù)個數(shù)必須和配置的參數(shù)個數(shù)?致,且數(shù)據(jù)類型匹配。同時需要注意的是,當沒有?參構(gòu)造時,則必須提供構(gòu)造函數(shù)參數(shù)的注?,否則Spring框架會報錯。