溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring ioc容器介紹

發(fā)布時間:2020-05-27 15:18:14 來源:億速云 閱讀:306 作者:鴿子 欄目:編程語言

1 BeanFactory與ApplicationContext區(qū)別

Spring ioc容器介紹

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

Spring ioc容器介紹

        啟動 IoC 容器的?式:

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

        * Web環(huán)境下啟動IoC容器
            ①從xml啟動容器
                                <!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)聽器啟動Spring的IOC容器-->
                        <listener>
                        <listener-
                        class>org.springframework.web.context.ContextLoaderListener</listener-
                        class>
                        </listener>
                        </web-app>

                ②從配置類啟動容器
                                             <!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知道我們使?注解的?式啟動ioc容器-->
                        <context-param>
                        <param-name>contextClass</param-name>
                        <param-
                        value>org.springframework.web.context.support.AnnotationConfigWebAppli
                        cationContext</param-value>
                        </context-param>
                        <!--配置啟動類的全限定類名-->
                        <context-param>
                        <param-name>contextConfigLocation</param-name>
                        <param-value>com.lagou.edu.SpringConfig</param-value>
                        </context-param>
                        <!--使?監(jiān)聽器啟動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">

            實例化Bean的三種?式
            ?式?:使??參構造函數
            在默認情況下,它會通過反射調??參構造函數來創(chuàng)建對象。如果類中沒有?參構造函數,將創(chuàng)建失敗。

            ?式?:使?靜態(tài)?法創(chuàng)建
            在實際開發(fā)中,我們使?的對象有些時候并不是直接通過構造函數就可以創(chuàng)建出來的,它可能在創(chuàng)建的過程 中會做很多額外的操作。此時會提供?個創(chuàng)建對象的?法,恰好這個?法是static修飾的?法,即是此種情 況。
            例如,我們在做Jdbc操作時,會?到java.sql.Connection接?的實現類,如果是mysql數據庫,那么?的就 是JDBC4Connection,但是我們不會去寫 JDBC4Connection connection = new JDBC4Connection() ,因 為我們要注冊驅動,還要提供URL和憑證信息,? DriverManager.getConnection ?法來獲取連接。

           ?式三:使?實例化?法創(chuàng)建
此種?式和上?靜態(tài)?法創(chuàng)建其實類似,區(qū)別是?于獲取對象的?法不再是static修飾的了,?是類中的? 個普通?法。此種?式?靜態(tài)?法創(chuàng)建的使??率要??些。
在早期開發(fā)的項?中,??類中的?法有可能是靜態(tài)的,也有可能是?靜態(tài)?法,當是?靜態(tài)?法時,即可 采?下?的配置?式:
            <!--使?實例?法創(chuàng)建對象的配置?式-->
        <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對象的創(chuàng)建時,Bean對象默認都是單例的,但是它?持配置的?式改
變作?范圍。作?范圍官?提供的說明如下圖:

Spring ioc容器介紹

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

不同作?范圍的?命周期
單例模式:singleton
對象出?:當創(chuàng)建容器時,對象就被創(chuàng)建了。
對象活著:只要容器在,對象?直活著。
對象死亡:當銷毀容器時,對象就被銷毀了。
?句話總結:單例模式的bean對象?命周期與容器相同。
多例模式:prototype
對象出?:當使?對象時,創(chuàng)建新的對象實例。
對象活著:只要對象在使?中,就?直活著。
對象死亡:當對象?時間不?時,被java的垃圾回收器回收了。
?句話總結:多例模式的bean對象,spring框架只負責創(chuàng)建,不負責銷毀。

Bean標簽屬性
在基于xml的IoC配置中,bean標簽是最基礎的標簽。它表示了IoC容器中的?個對象。換句話說,如果?個對象想讓spring管理,在XML的配置中都需要使?此標簽配置,Bean標簽的屬性如下:
id屬性: ?于給bean提供?個唯?標識。在?個標簽內部,標識必須唯?。
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對象裝配后調?。必須是?個?參?法。
destory-method屬性:?于指定bean對象的銷毀?法,此?法會在bean對象銷毀前執(zhí)?。它只能為scope是singleton時起作?。

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

  • 按照注?的?式分類
    構造函數注?:顧名思義,就是利?帶參構造函數實現對類成員的數據賦值。
    set?法注?:它是通過類成員的set?法實現數據的注?。(使?最多的)

  • 按照注?的數據類型分類
    基本類型和String
    注?的數據類型是基本類型或者是字符串類型的數據。
    其他Bean類型
    注?的數據類型是對象類型,稱為其他Bean的原因是,這個對象是要求出現在IoC容器
    中的。那么針對當前Bean來說,就是其他Bean了。
    復雜類型(集合類型)
    注?的數據類型是Aarry,List,Set,Map,Properties中的?種類型。

依賴注?的配置實現之構造函數注? 顧名思義,就是利?構造函數實現對類成員的賦值。它的使?要求是,類中提供的構造函數參數個數必須和配置的參數個數?致,且數據類型匹配。同時需要注意的是,當沒有?參構造時,則必須提供構造函數參數的注?,否則Spring框架會報錯。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI