【Spring開發】—— Spring Core

前言java

  最近因爲一些工做的須要,還有本身知識的匱乏再次翻開spring。正好整理了一下相關的知識,彌補了以前對spring的一些錯誤認知。這一次學習,更加深刻的理解了Ioc和AOP的思想,並對其架構模塊有了更深一步的理解。web

  剛開始翻看spring技術內幕,雖然有了一點看源碼的經驗,可是直接看如此深的源碼,仍是很頭疼。spring因爲業務的擴展,以及用戶羣的增長,對於某些模塊的類封裝的很深!所以追溯源碼是個很頭疼的問題,而直接看這本書,也是壓力山大。正則表達式

  因而回去複習一下spring的基本知識,先學會走,在學跑。spring

  先說說spring的核心模塊相關的概念,IOC和AOP。編程

  IoC(inversion of control)控制反轉,也就是說,控制權由對象轉移,對象本身變成了被動的接受。架構

  DI(dependency injection)依賴注入app

  AOP(aspect oriented programming)面向切面編程框架

 

  先簡單的說說這個AOP  

 

  AOP中利用面向切面的編程理論,把每一個方法或者函數當作一個切面,在這個切面先後均可以執行不一樣的方法。ide

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
相關文章
相關標籤/搜索