IOC

IOC(概念和原理)

什么是IOC?

  1. 反轉(zhuǎn)控制,把對(duì)象創(chuàng)建和對(duì)象之間的調(diào)用過(guò)程,交給Spring進(jìn)行管理
  2. 使用IOC目的:為了耦合度降低

IOC過(guò)程:(降低耦合度)

// 第一步:xml配置文件,配置創(chuàng)建的對(duì)象
<bean id="dao" class="com.mfei.fun.UserDao"></bean>
// 第二步:有service和dao類。創(chuàng)建工廠類
class UserFactory {
    public static UserDao getDao() {
        String classValue - class屬性值;
        Class class = Class.forName(classValue);
        return (UserDao)class.newInstance();
    }
}

IOC接口

  1. IOC思想基于IOC容器完成,IOC容器底層就是對(duì)象工廠
  2. Spring提供IOC容器實(shí)現(xiàn)兩種方式(兩個(gè)接口)
    1. BeanFactory:IOC容器基本實(shí)現(xiàn),是Spring內(nèi)部的使用接口,不提供開發(fā)人員進(jìn)行使用
      1. 加載配置文件時(shí)不會(huì)創(chuàng)建對(duì)象,在獲取(/ 使用)對(duì)象才去創(chuàng)建對(duì)象
    2. ApplicationContext:BeanFactory接口的子接口,提供更多更強(qiáng)大的功能。
      1. 加載配置文件的時(shí)候就會(huì)把配置文件對(duì)象進(jìn)行創(chuàng)建。
    3. 思考:哪個(gè)更好?把費(fèi)時(shí)費(fèi)力的操作,在啟動(dòng)的時(shí)候就創(chuàng)建好。

IOC操作 Bean管理

什么是Bean管理?(兩個(gè)操作)

  • Spring創(chuàng)建對(duì)象
  • Spring注入屬性

Bean管理操作有兩種方法

  1. 基于xml配置文件方式實(shí)現(xiàn)

    <bean id="dao" class="com.mfei.fun.UserDao"></bean>

    id屬性:唯一標(biāo)識(shí)

    class屬性:類全路徑

    創(chuàng)建對(duì)象的時(shí)候,默認(rèn)執(zhí)行無(wú)參構(gòu)造方法完成對(duì)象創(chuàng)建

    ==屬性注入==

    第一種:使用set方法

    <bean ….>

    <property name="bname" value="mfei"></propetry>

    第二種:使用有參構(gòu)造注入

    1、創(chuàng)建有參構(gòu)造器

    2、配置文件中

    <bean id="dao" class="com.mfei.fun.UserDao">

    <constructor-arg name="ooname" value="abc"></constructor-arg>

    <constructor-arg name="address" value="China"></constructor-arg>

    </bean>

  2. 基于注解方式實(shí)現(xiàn)

IOC操作Bean管理(FactoryBean)
  1. ==Spring有兩種類型bean,一種是普通bean,另外一種工廠bean(FactoryBean)==
  2. ==普通bean:在配置文件中定義bean類型就是返回類型==
  3. ==工廠bean:在配置文件定義bean類型可以和返回類型不一樣==
    1. ==第一步 創(chuàng)建類,讓這個(gè)類作為工廠bean,實(shí)現(xiàn)接口FactoryBean==
    2. ==第二步 實(shí)現(xiàn)接口里面的方法,在實(shí)現(xiàn)的方法中定義返回的類型==
IOC操作Bean管理(bean作用域)
  1. 在Spring中,創(chuàng)建bean是單實(shí)例還是多實(shí)例

  2. 默認(rèn)是單實(shí)例對(duì)象

  3. ==如何設(shè)置是單實(shí)例和多實(shí)例==

    1. 在Spring配置文件bean標(biāo)簽里面有屬性(scope)用于設(shè)置單實(shí)例還是多實(shí)例

    2. scope屬性值

      1. 第一個(gè)值 默認(rèn)值:singleton,表示單實(shí)例對(duì)象

      2. prototype,表示是多實(shí)例對(duì)象

      3. <bean id="book" class="com.atguigu.spring5.collectiontype.Book" scope="prototype">
            <property name="list" ref="bookList"></property>
        </bean>
        
    3. singleton和prototype區(qū)別

      1. singleton單實(shí)例,prototype多實(shí)例
      2. 設(shè)置scope值是singleton時(shí)候,加載spring配置文件時(shí)候就會(huì)創(chuàng)建單實(shí)例對(duì)象
      3. 設(shè)置scope值是prototype時(shí)候,不是在加載spring配置文件時(shí)候創(chuàng)建對(duì)象,在調(diào)用getBean方法時(shí)候創(chuàng)建多實(shí)例對(duì)象
    4. request 一次請(qǐng)求(了解)

    5. session 一次對(duì)話(了解)

IOC操作Bean管理(bean生命周期)
  1. 通過(guò)構(gòu)造器創(chuàng)建bean實(shí)例(無(wú)參構(gòu)造)
  2. 為bean的屬性設(shè)置值和對(duì)其他bean引用(調(diào)用set方法)
  3. 調(diào)用bean的初始化方法(需要進(jìn)行配置初始化方法)
  4. bean可以使用了(對(duì)象獲取到了)
  5. 當(dāng)容器關(guān)閉時(shí)候,調(diào)用bean的銷毀方法(需要進(jìn)行配置銷毀的方法)

==后置方法(配置后置處理器)==

IOC操作Bean管理(xml自動(dòng)裝配)
  1. 什么是自動(dòng)裝配
    1. 根據(jù)指定裝配規(guī)則(屬性名或者屬性類型),Spring自動(dòng)將匹配的屬性值進(jìn)行注入
  2. bean標(biāo)簽中有屬性autowire
    1. byName 根據(jù)名稱注入
    2. byType根據(jù)類型注入
IOC操作Bean管理(外部屬性文件)

*引入context名稱空間

IOC操作Bean管理(注解注入)
  • @Autowired:根據(jù)屬性類型進(jìn)行自動(dòng)裝配
  • @Qualifier:根據(jù)屬性名稱進(jìn)行注入
  • @Resource:可以根據(jù)類型注入,可有根據(jù)名稱注入
  • @Value:注入普通類型屬性

@Configuration:作為配置類,替代xml文件

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容