Springioc基礎(chǔ)內(nèi)容

1 BeanFactory與ApplicationContext區(qū)別

十余年的清豐網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)營(yíng)銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整清豐建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)建站從事“清豐網(wǎng)站設(shè)計(jì)”,“清豐網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

Spring ioc基礎(chǔ)內(nèi)容

BeanFactory是Spring框架中IoC容器的頂層接?,它只是?來(lái)定義?些基礎(chǔ)功能,定義?些基礎(chǔ)規(guī)范,?ApplicationContext是它的?個(gè)?接?,所以ApplicationContext是具備BeanFactory提供的全部功能的。
通常,我們稱BeanFactory為SpringIOC的基礎(chǔ)容器,ApplicationContext是容器的?級(jí)接?,?BeanFactory要擁有更多的功能,?如說(shuō)國(guó)際化?持和資源訪問(wèn)(xml,java配置類)等等

Spring ioc基礎(chǔ)內(nèi)容

        啟動(dòng) IoC 容器的?式:

        * Java環(huán)境下啟動(dòng)IoC容器
            ①ClassPathXmlApplicationContext:從類的根路徑下加載配置?件(推薦使?)
            ②FileSystemXmlApplicationContext:從磁盤路徑上加載配置?件
            ③AnnotationConfigApplicationContext:純注解模式下啟動(dòng)Spring容器

        * Web環(huán)境下啟動(dòng)IoC容器
            ①?gòu)膞ml啟動(dòng)容器
                                <!DOCTYPE web-app PUBLIC
                        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
                        "http://java.sun.com/dtd/web-app_2_3.dtd" >
                        <web-app>
                        <display-name>Archetype Created Web Application</display-name>
                        <!--配置Spring ioc容器的配置?件-->
                        <context-param>
                        <param-name>contextConfigLocation</param-name>
                        <param-value>classpath:applicationContext.xml</param-value>
                        </context-param>
                        <!--使?監(jiān)聽器啟動(dòng)Spring的IOC容器-->
                        <listener>
                        <listener-
                        class>org.springframework.web.context.ContextLoaderListener</listener-
                        class>
                        </listener>
                        </web-app>

                ②從配置類啟動(dòng)容器
                                             <!DOCTYPE web-app PUBLIC
                        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
                        "http://java.sun.com/dtd/web-app_2_3.dtd" >
                        <web-app>
                        <display-name>Archetype Created Web Application</display-name>
                        <!--告訴ContextloaderListener知道我們使?注解的?式啟動(dòng)ioc容器-->
                        <context-param>
                        <param-name>contextClass</param-name>
                        <param-
                        value>org.springframework.web.context.support.AnnotationConfigWebAppli
                        cationContext</param-value>
                        </context-param>
                        <!--配置啟動(dòng)類的全限定類名-->
                        <context-param>
                        <param-name>contextConfigLocation</param-name>
                        <param-value>com.lagou.edu.SpringConfig</param-value>
                        </context-param>
                        <!--使?監(jiān)聽器啟動(dòng)Spring的IOC容器-->
                        <listener>
                        <listener-
                        class>org.springframework.web.context.ContextLoaderListener</listener-
                        class>
                        </listener>
                        </web-app>

2 純xml模式
xml ?件頭
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">

            實(shí)例化Bean的三種?式
            ?式?:使??參構(gòu)造函數(shù)
            在默認(rèn)情況下,它會(huì)通過(guò)反射調(diào)??參構(gòu)造函數(shù)來(lái)創(chuàng)建對(duì)象。如果類中沒有?參構(gòu)造函數(shù),將創(chuàng)建失敗。

            ?式?:使?靜態(tài)?法創(chuàng)建
            在實(shí)際開發(fā)中,我們使?的對(duì)象有些時(shí)候并不是直接通過(guò)構(gòu)造函數(shù)就可以創(chuàng)建出來(lái)的,它可能在創(chuàng)建的過(guò)程 中會(huì)做很多額外的操作。此時(shí)會(huì)提供?個(gè)創(chuàng)建對(duì)象的?法,恰好這個(gè)?法是static修飾的?法,即是此種情 況。
            例如,我們?cè)谧鯦dbc操作時(shí),會(huì)?到j(luò)ava.sql.Connection接?的實(shí)現(xiàn)類,如果是MySQL數(shù)據(jù)庫(kù),那么?的就 是JDBC4Connection,但是我們不會(huì)去寫 JDBC4Connection connection = new JDBC4Connection() ,因 為我們要注冊(cè)驅(qū)動(dòng),還要提供URL和憑證信息,? DriverManager.getConnection ?法來(lái)獲取連接。

           ?式三:使?實(shí)例化?法創(chuàng)建
此種?式和上?靜態(tài)?法創(chuàng)建其實(shí)類似,區(qū)別是?于獲取對(duì)象的?法不再是static修飾的了,?是類中的? 個(gè)普通?法。此種?式?靜態(tài)?法創(chuàng)建的使??率要??些。
在早期開發(fā)的項(xiàng)?中,??類中的?法有可能是靜態(tài)的,也有可能是?靜態(tài)?法,當(dāng)是?靜態(tài)?法時(shí),即可 采?下?的配置?式:
            <!--使?實(shí)例?法創(chuàng)建對(duì)象的配置?式-->
        <bean id="beanFactory"
        class="com.lagou.factory.instancemethod.BeanFactory"></bean>
        <bean id="transferService" factory-bean="beanFactory" factory-
        method="getTransferService"></bean>

3.Bean的X及?命周期
作?范圍的改變
在spring框架管理Bean對(duì)象的創(chuàng)建時(shí),Bean對(duì)象默認(rèn)都是單例的,但是它?持配置的?式改
變作?范圍。作?范圍官?提供的說(shuō)明如下圖:

Spring ioc基礎(chǔ)內(nèi)容

    在上圖中提供的這些選項(xiàng)中,我們實(shí)際開發(fā)中?到最多的作?范圍就是singleton(單例模式)和prototype(原型模式,也叫多例模式)。配置?式參考下?的代碼:
        <!--使?靜態(tài)?法創(chuàng)建對(duì)象的配置?式-->
        <bean id="userService" class="com.lagou.factory.BeanFactory"
        factory-method="getTransferService"></bean>
        <!--使?實(shí)例?法創(chuàng)建對(duì)象的配置?式-->
        <bean id="beanFactory"
        class="com.lagou.factory.instancemethod.BeanFactory"></bean>
        <bean id="transferService" factory-bean="beanFactory" factory-
        method="getTransferService"></bean>
        <!--配置service對(duì)象-->
        <bean id="transferService"
        class="com.lagou.service.impl.TransferServiceImpl" scope="singleton">
        </bean>

不同作?范圍的?命周期
單例模式:singleton
對(duì)象出?:當(dāng)創(chuàng)建容器時(shí),對(duì)象就被創(chuàng)建了。
對(duì)象活著:只要容器在,對(duì)象?直活著。
對(duì)象死亡:當(dāng)銷毀容器時(shí),對(duì)象就被銷毀了。
?句話總結(jié):?jiǎn)卫J降腷ean對(duì)象?命周期與容器相同。
多例模式:prototype
對(duì)象出?:當(dāng)使?對(duì)象時(shí),創(chuàng)建新的對(duì)象實(shí)例。
對(duì)象活著:只要對(duì)象在使?中,就?直活著。
對(duì)象死亡:當(dāng)對(duì)象?時(shí)間不?時(shí),被java的垃圾回收器回收了。
?句話總結(jié):多例模式的bean對(duì)象,spring框架只負(fù)責(zé)創(chuàng)建,不負(fù)責(zé)銷毀。

Bean標(biāo)簽屬性
在基于xml的IoC配置中,bean標(biāo)簽是最基礎(chǔ)的標(biāo)簽。它表示了IoC容器中的?個(gè)對(duì)象。換句話說(shuō),如果?個(gè)對(duì)象想讓spring管理,在XML的配置中都需要使?此標(biāo)簽配置,Bean標(biāo)簽的屬性如下:
id屬性: ?于給bean提供?個(gè)唯?標(biāo)識(shí)。在?個(gè)標(biāo)簽內(nèi)部,標(biāo)識(shí)必須唯?。
class屬性:?于指定創(chuàng)建Bean對(duì)象的全限定類名。
name屬性:?于給bean提供?個(gè)或多個(gè)名稱。多個(gè)名稱?空格分隔。
factory-bean屬性:?于指定創(chuàng)建當(dāng)前bean對(duì)象的??bean的唯?標(biāo)識(shí)。當(dāng)指定了此屬性之后,class屬性失效。
factory-method屬性:?于指定創(chuàng)建當(dāng)前bean對(duì)象的???法,如配合factory-bean屬性使?,則class屬性失效。如配合class屬性使?,則?法必須是static的。
scope屬性:?于指定bean對(duì)象的作?范圍。通常情況下就是singleton。當(dāng)要?到多例模式時(shí),可以配置為prototype。 init-method屬性:?于指定bean對(duì)象的初始化?法,此?法會(huì)在bean對(duì)象裝配后調(diào)?。必須是?個(gè)?參?法。
destory-method屬性:?于指定bean對(duì)象的銷毀?法,此?法會(huì)在bean對(duì)象銷毀前執(zhí)?。它只能為scope是singleton時(shí)起作?。

4.DI 依賴注?的xml配置
依賴注?分類

  • 按照注?的?式分類
    構(gòu)造函數(shù)注?:顧名思義,就是利?帶參構(gòu)造函數(shù)實(shí)現(xiàn)對(duì)類成員的數(shù)據(jù)賦值。
    set?法注?:它是通過(guò)類成員的set?法實(shí)現(xiàn)數(shù)據(jù)的注?。(使?最多的)

  • 按照注?的數(shù)據(jù)類型分類
    基本類型和String
    注?的數(shù)據(jù)類型是基本類型或者是字符串類型的數(shù)據(jù)。
    其他Bean類型
    注?的數(shù)據(jù)類型是對(duì)象類型,稱為其他Bean的原因是,這個(gè)對(duì)象是要求出現(xiàn)在IoC容器
    中的。那么針對(duì)當(dāng)前Bean來(lái)說(shuō),就是其他Bean了。
    復(fù)雜類型(集合類型)
    注?的數(shù)據(jù)類型是Aarry,List,Set,Map,Properties中的?種類型。

依賴注?的配置實(shí)現(xiàn)之構(gòu)造函數(shù)注? 顧名思義,就是利?構(gòu)造函數(shù)實(shí)現(xiàn)對(duì)類成員的賦值。它的使?要求是,類中提供的構(gòu)造函數(shù)參數(shù)個(gè)數(shù)必須和配置的參數(shù)個(gè)數(shù)?致,且數(shù)據(jù)類型匹配。同時(shí)需要注意的是,當(dāng)沒有?參構(gòu)造時(shí),則必須提供構(gòu)造函數(shù)參數(shù)的注?,否則Spring框架會(huì)報(bào)錯(cuò)。

文章題目:Springioc基礎(chǔ)內(nèi)容
分享地址:http://muchs.cn/article8/ghjcop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、微信小程序、品牌網(wǎng)站建設(shè)、靜態(tài)網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)