Spring-IOC使用:
IOC:控制反轉
DI:依賴注入
兩者關系:IOC使用依賴注入(DI)的方式,将對象的建立交給spring容器(包含并管理應用對象的配置和生命周期)中,然後調用時,直接從spring容器中獲得。
Spring容器在初始化時先讀取配置檔案,根據配置檔案或中繼資料建立與組織對象存入容器中,程式使用時再從IOC容器中取出需要的對象。從容器中取回的對象預設是單例的,隻能建立一個對象。
使用scope屬性可以指定作用域:
Singleton:每個spring容器作用域中一個bean隻對應一個對象執行個體。
Prototype:一個bean定義多個對象執行個體。
Request:一個bean定義作用于http request生命周期是指每個http request擁有自己的通過一個bean定義建立的執行個體,僅在基于web的spring applicationcontext中有效。
Session:一個bean定義作用于http session生命周期,僅在基于web的spring applicationcontext中有效。
Global:一個bean定義作用于全局的http session生命周期,僅在portlet context中使用才有效,僅在基于web的session spring applicationcontext中有效。
Application:一個bean定義作用于整個servletcontext生命周期,僅在基于web的spring applicationcontext中有效。
Pom.xml檔案配置:
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.8.RELEASE</version>
</dependency>
</dependencies>
通過上述代碼可自動導入的包:
- org.springframework:spring-aop:5.1.8.RELEASE :面向切面的程式設計,可以設定方法攔截器與切入點,進而将邏輯代碼與實作函數分離。
- org.springframework:spring-beans:5.1.8.RELEASE:包含通路配置檔案、建立和管理bean以及進行ioc/di操作的相關beanFactory.
- org.springframework:spring-context:5.1.8.RELEASE:ApplicationCotext,繼承了beans特性,擴充添加國際化時間傳播、資源加載和對context的建立和支援。
- org.springframework:spring-core:5.1.8.RELEASE:核心工具類
- org.springframework:spring-expression:5.1.8.RELEASE:提供表達式
- org.springframework:spring-web:5.1.8.RELEASE
Spring.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 http://www.springframework.org/schema/beans/spring-beans.xsd">
Spring-ioc的功能:依賴注入和控制反轉(實作方式DI)
控制反轉:控制獲得對象的方式的反轉,對象的建立轉交給第三方進行,即spring容器。
Spring容器在初始化時先讀取配置檔案,根據配置檔案或中繼資料建立與組織對象存入容器中,程式使用時再從IOC容器中取出需要的對象。
依賴注入的方式:
方式一、基于setter方法注入
通過無參構造器或無參static工廠方法執行個體化bean後,調用該bean的setter方法,即可實作依賴注入。
bean配置檔案:
<bean class="person" name="person">
<property name="id" value="1234"/>
</bean>
備注:其中的id是根據setter方法的名字來獲得的。
方式二、基于構造方法注入
基于構造器DI,通過調用帶參數的構造方法實作,每個參數代表一個依賴。
<bean class="person" name="person">
<constructor-arg name="name" value="liying"/>
方式三、複雜資料類型的依賴注入
設定空值:<null></null>
List注入:
如果屬性是基本資料類型,<value标簽>
<list>
<value>123</value>
<value>456</value>
</list>
如果屬性是bean,使用标簽<bean>
Map注入:
如果屬性是基本資料類型,使用<entry key=”” value=””>
<map>
<entry key="123" value="wer"/>
<entry key="456" value="tyu"/>
</map>
如果屬性是<bean>,使用<bean> value-ref