前言
最近由于一些工作的需要,還有自己知識的匮乏再次翻開spring。正好整理了一下相關的知識,彌補了之前對spring的一些錯誤認知。這一次學習,更加深入的了解了Ioc和AOP的思想,并對其架構子產品有了更深一步的了解。
剛開始翻看spring技術内幕,雖然有了一點看源碼的經驗,但是直接看如此深的源碼,還是很頭疼。spring由于業務的擴充,以及使用者群的增加,對于某些子產品的類封裝的很深!是以追溯源碼是個很頭疼的問題,而直接看這本書,也是壓力山大。
于是回去複習一下spring的基本知識,先學會走,在學跑。
先說說spring的核心子產品相關的概念,IOC和AOP。
IoC(inversion of control)控制反轉,也就是說,控制權由對象轉移,對象自己變成了被動的接受。
DI(dependency injection)依賴注入
AOP(aspect oriented programming)面向切面程式設計
先簡單的說說這個AOP
AOP中利用面向切面的程式設計理論,把每個方法或者函數當做一個切面,在這個切面前後都可以執行不同的方法。
1 <bean id="service">
2 <property name="interceptorNames" value="advisor"></property>
3 <property name="target">目标</property>
4 </bean>
這裡定義了一個攔截器,一個目标bean。
1 <bean id="advisor" class="...">
2 <property name="advice">//攔截器對象
3 </property>
4 <property name="mappedName">//攔截的方法
5 </property>
6 </bean>
這個目标bean在執行時,會根據配置來确定切面,精确到某個方法。而攔截的方法由上面的mappedName确定,可以通過名字或者通過正規表達式來确定。攔截器對象确定了攔截時觸發的函數。
可以進行方法前攔截、方法後攔截、異常攔截。

可以看到Spring Core是spring架構中最低層核心的子產品。提供了最基本的Ioc思想架構。
下面講解一下如何使用!
由于spring是把一個類配置在xml配置檔案中,進而進行一些相關的依賴或者注入等等。那麼這個配置檔案,肯定要被本地化存儲并且進行讀取。
是以在我們使用前,要進行三步:
讀取spring配置檔案
bean定義
注入到Ioc容器
之後我們就可以通過bean工廠的getBean擷取指定的bean了。
1 最常見的讀取配置檔案的三種方法:
1 利用ClassPathResource讀取資源檔案,傳入XmlBeanFactory中
1 ClassPathResource res = new ClassPathResource("application.xml")
2 XmlBeanFactory factory - new XmlBeanFactory(res);
3 factory.getBean("testBean");
2 利用輸入流,傳入到XmlBeanFactory中
1 InputStream is = new FileInputStream("C:\\ApplicationContext.xml");
2 XmlBeanFactory factory - new XmlBeanFactory(is);
3 直接通過ClassPathXmlApplicationContext讀取資源檔案
ClassPathXmlAppliationContext appContext = new ClassPathXmlApplicationContext("aaplicationContext.xml");
4 通過在web.xml中指定配置檔案的目錄,自動讀取。關于配置檔案的路徑有很多種寫法,通過指定ClassPath也可以。
1 <listener>
2 <listener-class>
3 org.springframework.web.context.ContextLoaderListener
4 </listener-class>
5 </listener>
6
7 <context-param>
8 <param-name> contextConfigLocation</param-name>
9 <param-value>
10 /WEB-INF/classes/bean.xml
11 </param-value>
12 </context-param>
2 Bean的定義這部分就沒什麼好說的了,就是讀取配置檔案,解析裡面的檔案定義,抽取成資料模型。
3 而注入到Ioc容器中,就是把這個資料模型讀取到一個總的BeanFactory中,統一的進行管理。
我們就可以通過這個BeanFactory進行一些操作,比如GetBean()或者containsBean()等等。
雜七雜八
下面簡單的羅列了一些配置的内容:
1 工廠模式
<bean id="examples.MyFactoryBean" factory-method="createInstance"/>
2 構造函數
<bean id="testBean" class="examples.ExampleBean">
<constructor-arg><ref bean="testArgs1"/></construtor-arg>
<constructor-arg><ref bean="testArgs2"/></construtor-arg>
</bean>
相當于
class testBean{
public testBean(testArgs1,testArgs2);
}
3 單例模式
<bean id="testBean" class="test.testBean" singleton="false"> 每次請求生成的都是同一個bean
4 <idef> 與 <ref>作用相同,但是idef會在xml加載時 檢查 bean是否存在
destroy-method 銷毀,通常都是配置資料源、JDBC、輸入輸入流時,需要在close時銷毀對象
depends-on 先後順序執行個體化
init-method 初始化調用方法
8 也可以通過指定的接口,java類進行相應的操作:
BeanNameAware 讓類知道自己bean在xml中的id名字
BeanFactoryAware 獲得beanFactory
InitializingBean接口執行初始化方法
Disposablebean 執行銷毀方法
9 屬性覆寫,這個通常是在配置了一些屬性,但是有其他的一些檔案修改了這個屬性時,使用。
比如說,我們在項目中通過spring的配置檔案配置了資料源的相關資訊,但是額外有一個xxx.properties進行資訊的重寫。當有這個檔案時,可以讓客戶自己修改其連接配接資訊,而不用每次都去修改繁瑣的spring配置檔案。
org.springframework.beans.factory.config.PropertyPlaceholderConfigurer
作者:xingoo
出處:http://www.cnblogs.com/xing901022
本文版權歸作者和部落格園共有。歡迎轉載,但必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接!