D40-Spring(ioc xml的配置)
阿新 • • 發佈:2019-01-05
一、IOC的相關概念
1.1 IOC
-
ioc(容器): 控制反轉
-
- 作用:解程式碼的耦合並建立管理物件
-
- 直接問ioc容器要物件即可
- 直接問ioc容器要物件即可
-
ioc是spring的核心技術之一。
1.2 Spring框架
- 是封層的輕量級開源框架,以IOC(控制反轉) 和 AOP(面向切面程式設計) 為核心。提供了展現層 SpringMVC 和持久層 Spring JDBC 以及業務層事務管理等眾多的企業級應用技術。還可以整合第三方框架和類庫。
二、Spring的IOC操作
2.1 搭建環境
- 匯入 ioc 的座標。
- 配置xml檔案
- java程式碼實現
2.2 IOC屬性
-
Bean標籤: 指定要建立的物件
-
- id屬性:代表唯一標識
-
- class屬性:代表要建立物件的類的全限定名
-
-
- scope屬性:範圍
取值:singleton 單例(預設)
特點:物件會隨著容器的建立而建立 物件會隨著容器的銷燬而銷燬
- scope屬性:範圍
-
-
prototype 多例
-
- 特點:物件的建立和銷燬和容器無關,會隨著呼叫getbean方法的時候 才建立物件 呼叫一次 建立一次新的物件
-
- 銷燬是跟著垃圾回收機制走的
-
- 應用場景:根據當前類的執行緒安全來決定的
-
執行緒安全的類: singleton
-
執行緒不安全的類: prototype
-
- 例如:sqlSessionFactory(執行緒安全)singleton
sqlSession(執行緒不安全)prototype
- 例如:sqlSessionFactory(執行緒安全)singleton
-
瞭解屬性:
-
- 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程式解耦合並且建立管理物件