1. 程式人生 > >D40-Spring(ioc xml的配置)

D40-Spring(ioc xml的配置)

一、IOC的相關概念

1.1 IOC

  • ioc(容器): 控制反轉

    • 作用:解程式碼的耦合並建立管理物件
    • 直接問ioc容器要物件即可

  • ioc是spring的核心技術之一。

1.2 Spring框架

  • 是封層的輕量級開源框架,以IOC(控制反轉)AOP(面向切面程式設計) 為核心。提供了展現層 SpringMVC 和持久層 Spring JDBC 以及業務層事務管理等眾多的企業級應用技術。還可以整合第三方框架和類庫。

二、Spring的IOC操作

2.1 搭建環境

  1. 匯入 ioc 的座標。
  2. 配置xml檔案
  3. java程式碼實現

2.2 IOC屬性

  • Bean標籤: 指定要建立的物件

    • id屬性:代表唯一標識
    • class屬性:代表要建立物件的類的全限定名
      • scope屬性:範圍
        取值:singleton 單例(預設)
        特點:物件會隨著容器的建立而建立 物件會隨著容器的銷燬而銷燬
  • prototype 多例

    • 特點:物件的建立和銷燬和容器無關,會隨著呼叫getbean方法的時候 才建立物件 呼叫一次 建立一次新的物件
    • 銷燬是跟著垃圾回收機制走的
    • 應用場景:根據當前類的執行緒安全來決定的
  • 執行緒安全的類: singleton

  • 執行緒不安全的類: prototype

    • 例如:sqlSessionFactory(執行緒安全)singleton
      sqlSession(執行緒不安全)prototype
  • 瞭解屬性:

    • init-method:配置初始化方法
      • 特點:物件只要一創建出來 就會立即執行配置好的初始化方法
    • destory-method:配置銷燬方法的
      • 特點:物件只要一銷燬 之前就會立即執行配置好的銷燬方法
 <bean id="accountService" class="com.serviceimpl.AccountServiceImpl" scope="prototype"
          init-method="aaa" destroy-method="bbb"></bean>

2.3 spring的ioc建立物件的三種方式

2.3.1 通過無參構造器反射的方式

  • 格式: < bean id =“唯一值” class=“類的全限定名”>

2.3.2 靜態工廠模式

  • 特點: 工廠的方法都是靜態的,可以 類名.方法名()
<bean id="accountService" class="com.serviceimpl.AccountServiceImpl"></bean>

2.3.3 例項工廠模式

  • 特點: 工廠的方法都是非靜態的,得先有工廠的例項,才能呼叫工廠的方法
<bean id="factory" class="com.utils.BeanFactory2"></bean>
    <bean id="accountService" factory-bean="factory" factory-method="getBean"></bean>

2.4 Spring 中的依賴注入

  • 給當前類的屬性進行賦值
    • spring給你提供了賦值的技術—依賴注入(DI)
    • 依賴注入:對存在的依賴關係的屬性或者物件自動賦值
    • 都會給哪些型別的屬性賦值:
      • 簡單屬性:int String 包裝型別
      • 複雜屬性:陣列,list set map
      • 物件屬性:自定義的物件

構造器給該類的屬性賦值(DI)

屬性

  • index:根據引數的角標位置來定位引數
  • name:根據引數的名稱來定位
    type:根據引數的全限定名來定位
    • 以上三個屬性時用來定位引數的
      value:給簡單屬性賦值
      ref:給物件屬性賦值
      在二級結構中,可以使用標籤給複雜型別屬性賦值
    • 以上兩個屬性是用來賦值的
<constructor-arg name="arr"  >
            <array>
                <value>aaa</value>
                <value>bbb</value>
                <value>ccc</value>
            </array>
        </constructor-arg>

set屬性的方式

屬性:

  • name屬性:用來定位引數 定位的是set方法後面的那個名稱 首字母小寫
    • 底層:gameName將首字母變成大寫GameName加上set==去類中匹配該方法
  • value屬性:給簡單屬性賦值
  • ref屬性:給物件屬性賦值
<property name="arr">
            <array>
                <value>aaa</value>
                <value>ccc</value>
                <value>bbb</value>
            </array>
        </property>

在二級結構中可以使用標籤給複雜屬性賦值

複雜型別屬性 要使用二級結構標籤

陣列:list set

  • 使用組合任意搭配:
    • array=value
    • list=value
    • set = value
  • 鍵值對:map properties
    • 使用組合任意搭配:
      map = value
      properties = value
<property name="map">
           <!-- <props>
                <prop key="1">aaaaaa</prop>
                <prop key="2">bbbbbb</prop>
                <prop key="3">cccccc</prop>
            </props>-->
            <!--給map鍵值對賦值可以有兩種方式-->
            <map>
                <entry key="1" value="a"></entry>
                <entry key="2" value="b"></entry>
            </map>
        </property>

物件 屬性的注入

  • ref:指向的是被spring容器管理的物件的id()
<bean id="accountService4" class="com.serviceimpl.AccountServiceImpl4">
 <!--
  需要一個dao
     ref:指向的是被spring容器管理的物件的id()
      <constructor-arg name="accountDao" ref="accountDao"></constructor-arg>
   -->
<property name="accountDao" ref="accountDao"></property>
    </bean>
 <!--dao層
        此處的id為property中  ref 指向。
    -->
    <bean id="accountDao" class="com.daoimpl.AccountDaoImpl"></bean>

測試層

此處才accountService4與上面的 bean對應。

/ioc的方式
        //建立容器
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("bean.xml");
        //問容器要物件
        AccountService accountService4 = (AccountService)applicationContext.getBean("accountService4");
        //根據獲取的物件,執行方法
        accountService4.save();

三、總結

  • IOC:解程式碼的耦合,建立管理物件

  • 使用:1 匯入ioc座標 2 設定配置檔案 3 編寫ioc的api問容器要物件

  • 配置檔案的標籤介紹:

    • bean標籤:指定建立物件
    • id屬性:代表唯一
    • Class屬性:代表類的全限定名 (反射方式建立物件)
    • Scope屬性:代表使用單例物件還是多例物件
    • Singleton:預設就是單例物件 特點:物件隨著容器的建立而建立 隨著容器的銷燬而銷燬
    • Prototype: 代表就是多例物件 特點:物件的建立和銷燬和容器沒有關係 getbean的時候才建立物件 呼叫一次建立一次
  • 應用場景:執行緒安全用Singleton 執行緒不安全用Prototype

  • Spring的ioc建立物件的三種方式:無參構造器反射方式 靜態工廠 例項工廠

  • ioc的api介紹:

  • ApplicationConext介面:

    • ClassPathXmlApplication:載入配置檔案的 (今天xml配置ioc)
    • AnnotationConfigApplicationContext: 載入配置類的(註解配置ioc)
    • 方法:getBean(id屬性值) 問容器要物件
  • DI:依賴注入

    • 作用:可以給該類中有關係的屬性進行賦值
    • 屬性分了三種: 簡單屬性 複雜屬性 物件屬性
    • 依賴注入提供了2種方式給屬性注入:構造器方式 set屬性方式
      • 構造器:< constructor-arg>
      • Set屬性方式:< property>
  • 屬性介紹:針對構造器方式
    在這裡插入圖片描述
    屬性介紹:針對set屬性方式
    在這裡插入圖片描述

  • 複雜型別的注入:

    • 陣列 list set array=value list=value set=value
    • 鍵值對:map properties map=entry props=prop
  • 物件型別的注入:
    1 該物件要給ioc容器建立管理
    2 使用ref屬性進行注入 ref=ioc容器中管理物件的id標識

  • ioc是spring核心功能之一:用來給java程式解耦合並且建立管理物件