Spring 配置詳解
<!-- Bean元素:使用該元素描述需要spring容器管理的對象
class屬性:被管理對象的完整類名.
name屬性:給被管理的對象起個名字.獲得對象時根據該名稱獲得對象.
可以重複.可以使用特殊字符.
id屬性: 與name屬性一模一樣.
名稱不可重複.不能使用特殊字符.
結論: 儘量使用name屬性.
-->
<bean name="student" class="com.lsk.Student" ></bean>
<!--
可以通過import屬性導入其他spring配置文件
<import resource="路徑/*.xml"/>
-->
Spring 框架的思想
(1)、IOC:Inverse Of Control,即控制反轉,將對象創建的方式交給了 Spring 容器;
(2)、DI:Dependency Injection,即依賴注入,IOC 的實現需要 DI 支持。
Spring的兩種容器
(1)、Spring BeanFactory 容器
它是最簡單的容器,給 DI 提供了基本的支持,它用 org.springframework.beans.factory.BeanFactory 接口來定義。BeanFactory 或者相關的接口,如 BeanFactoryAware,InitializingBean,DisposableBean,在 Spring 中仍然存在具有大量的與 Spring 整合的第三方框架的反向兼容性的目的。
在 Spring 中,有大量對 BeanFactory 接口的實現。其中,最常被使用的是 XmlBeanFactory 類。這個容器從一個 XML 文件中讀取配置元數據,由這些元數據來生成一個被配置化的系統或者應用。
在資源寶貴的移動設備或者基於 applet 的應用當中, BeanFactory 會被優先選擇。否則,一般使用的是 ApplicationContext,除非你有更好的理由選擇 BeanFactory。
(2)、Spring ApplicationContext 容器
該容器添加了更多的企業特定的功能,例如從一個屬性文件中解析文本信息的能力,發佈應用程序事件給感興趣的事件監聽器的能力。該容器是由 org.springframework.context.ApplicationContext 接口定義。
ApplicationContext 包含 BeanFactory 所有的功能,一般情況下,相對於 BeanFactory,ApplicationContext 會被推薦使用。
最常被使用的 ApplicationContext 接口實現(類):
-
FileSystemXmlApplicationContext:該容器從 XML 文件中加載已被定義的 bean。在這裏,你需要提供給構造器 XML 文件的完整路徑
-
ClassPathXmlApplicationContext:該容器從 XML 文件中加載已被定義的 bean。在這裏,你不需要提供 XML 文件的完整路徑,只需正確配置 CLASSPATH 環境變量即可,因爲,容器會從 CLASSPATH 中搜索 bean 配置文件。
- WebXmlApplicationContext:該容器會在一個 web 應用程序的範圍內加載在 XML 文件中已被定義的 bean。
Spring 兩種注入方式
(1)、set方法注入:
<bean name="
student
" class="com.lsk.Student" >
<!--值類型注入: 爲stu對象中名爲name的屬性注入"孔乙己"作爲值 -->
<property name="name" value="孔乙己" ></property>
<property name="age" value="22" ></property>
<property name="grade" value="大三" ></property>
<property name="rang" value="1" ></property>
<!-- 引用類型注入: 爲course屬性注入下方配置的course對象 -->
<property name="course" ref="course" ></property>
</bean>
<!-- 將course對象配置到容器中 -->
<bean name="course" class="com.lsk.Course" >
<property name="name" value="Java開發" ></property>
<property name="page" value="112" ></property>
</bean>
(2)、構造函數注入:
<bean name="stu1" class="com.spring.bean.Student" >
<!-- name屬性: 構造函數的參數名 -->
<!-- index屬性: 構造函數的參數索引 -->
<!-- type屬性: 構造函數的參數類型-->
<constructor-arg name="name" index="0" type="java.lang.Integer" value="compasser" ></constructor-arg>
<constructor-arg name="course" ref="course" index="1" ></constructor-arg>
</bean>