天天看點

【Spring開發】—— Spring Core

前言

  最近由于一些工作的需要,還有自己知識的匮乏再次翻開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開發】—— Spring Core

  可以看到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

本文版權歸作者和部落格園共有。歡迎轉載,但必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接!