Spring深入研究(一)
阿新 • • 發佈:2019-01-28
Spring
建立Spring配置檔案
Spring配置檔案 名字位置不固定
放在src目錄下面,命名applicationContext.xml
schema約束
<?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" >
<bean id="foo" class="x.y.Foo">
<meta key="cacheName" value="foo"/>
<property name="name" value="Rick"/>
</bean>
</beans>
- bean例項化方式
第一種 使用類的無引數構造建立
第二種 使用靜態工廠建立
第三種使用例項工廠建立
- bean 標籤常用屬性
- id 屬性:
起的名稱,任意命名,根據id得到配置物件
class屬性:
要建立的bean的全路徑
name屬性:
與id屬性作用相同(遺留問題)
scope屬性: Bean的作用範圍:
singleton:預設值,單例的
prototype:多例的
request:物件存入到request域中
session:物件存入到Session域中
globalSession:如果沒有Porlet環境那麼globalSession相當於session
屬性注入
建立物件時候,向類裡面屬性裡面設定值
屬性注入三種方式:
- 使用set方法注入
<!--使用set方法注入屬性--> <bean id="book" class="com.jia.property.Book"> <!--注入屬性值 name屬性值:類裡面定義的屬性名稱 value屬性:設定具體的值 --> <property name="bookname" value="易筋經"></property> </bean>
- 有引數構造器注入
<!--使用有引數構造注入屬性--> <bean id="demo1" class="com.jia.property.PropertyDemo1"> <!--使用有參構造注入--> <constructor-arg name="username" value="小王小馬"></constructor-arg> </bean>
- 使用介面注入
注入物件型別屬性
<!--1配置service和dao物件-->
<bean id="userDao" class="com.jia.ioc.UserDao"></bean>
<bean id="userService" class="com.jia.ioc.UserService">
<!--注入dao物件
name屬性值:service類裡面屬性名稱
不要使用value屬性,因為字串使用value,物件使用ref
ref屬性:dao配置bean標籤中id值
-->
<property name="userDao" ref="userDao"></property>
</bean>
P名稱空間注入
xmlns:p="http://www.springframework.org/schema/p"
<!--p名稱空間注入--> <bean id="person" class="com.jia.property.Person" p:pname="lucy"></bean>
注入複雜型別屬性
- 1 陣列
- 2 list集合
- 3 map 集合
- 4 properties 型別
<!--注入複雜型別屬性值 --> <bean id="person" class="com.jia.property.Person"> <!--陣列 --> <property name="arrs"> <list> <value>小王</value> <value>小馬</value> <value>小宋</value> </list> </property> <!-- list --> <property name="list"> <list> <value>小奧</value> <value>小金</value> <value>小普</value> </list> </property> <!-- map --> <property name="map"> <map> <entry key="aa" value="lucy"></entry> <entry key="bb" value="mary"></entry> <entry key="cc" value="tom"></entry> </map> </property> <!-- properties --> <property name="properties"> <props> <prop key="driverclass">com.mysql.jdbc.Driver</prop> <prop key="username">root</prop> <prop key="password">root</prop> </props> </property> </bean>
IOC和DI區別
- IOC: 控制反轉,把物件建立交給spring進行配置
- DI: 依賴注入,向類裡面的屬性中設定值
- 關係: 依賴注入不能單獨存在,需要在ioc基礎之上完成操作
Spring整合web專案原理
- 1 載入Spring核心配置檔案
//載入spring配置檔案,根據建立物件 ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
new 物件,功能可以實現,效率很低
- 2 實現思想:把配置檔案和建立物件過程,在伺服器啟動時候完成
- 3 實現原理
(1)ServletContext物件
(2)監聽器
(3)具體使用:
- 在伺服器啟動時候,為每個專案建立一個ServletContext物件
- 在ServletContext物件建立時候,使用監聽器可以具體到ServletCintext物件在什麼時候建立
- 使用監聽器監聽到ServletContext物件建立時候,載入Spring配置檔案,把配置檔案配置物件建立
- 把創建出來的物件放到ServletContext域物件裡面(setAttribute方法)
- 獲取物件時候,到ServletContext域得到(getAttribute方法)