posts - 156,  comments - 601,  trackbacks - 0

          前言:

          本塊文章會(huì)通過(guò)連載的方式來(lái)深入了解和學(xué)習(xí)Spring相關(guān)核心技術(shù)和實(shí)現(xiàn)原理。包括SpringBean生命周期管理,聲明性事務(wù)管理,AOP管理,注解應(yīng)用實(shí)現(xiàn),以及在其上面進(jìn)行擴(kuò)展的相關(guān)應(yīng)用進(jìn)行介紹。

          本篇技術(shù)文章將作為Spring入門篇。

          什么是Spring開發(fā)框架?

          Spring 是一個(gè)基于Java/JavaEE的應(yīng)用開發(fā)平臺(tái)。其實(shí)現(xiàn)是由作者Rod Johnson2002年出版《Expert One-on-One J2EE Design and Development》一書后,總結(jié)經(jīng)驗(yàn)后,研發(fā)而成。
          Spring
          的核心內(nèi)容包括:
          1.
          輕量級(jí)的容器, 提供集中式,自動(dòng)配置與裝配應(yīng)用業(yè)務(wù)對(duì)象功能。

          Spring提供了管理業(yè)務(wù)對(duì)象的一致方法并且鼓勵(lì)了注入對(duì)接口編程而不是對(duì)類編程的良好習(xí)慣。Spring的架構(gòu)基礎(chǔ)是基于使用POJO對(duì)象管理的 Inversion of Control(控制反轉(zhuǎn))容器,提供非侵入的方式為當(dāng)前一些復(fù)雜的系統(tǒng)應(yīng)用提供松耦合,一致性的業(yè)務(wù)對(duì)象配置管理。容器以快捷開發(fā)為出發(fā)點(diǎn),方便開發(fā)中 的可測(cè)試性和部署時(shí)的可擴(kuò)展性為目的。實(shí)現(xiàn)只針對(duì)單個(gè)業(yè)務(wù)組件在獨(dú)立環(huán)境的下進(jìn)行開發(fā)與測(cè)試,在部署時(shí)再集成到任意的Java SEJava EE環(huán)境中。

          2. 提供了唯一的事務(wù)管理抽象,基于插件式的事務(wù)管理(聲明性事務(wù)管理)能夠很容易的實(shí)現(xiàn)事務(wù)層管理,而無(wú)需了解各種底層事務(wù)實(shí)現(xiàn),例如JTA或者 JDBC事務(wù)提供一個(gè)一致的編程模型。相對(duì)于只依賴Java EE環(huán)境的普通的JTAEJB CMT方式, Spring就更簡(jiǎn)單輕便了。

          3. 提供了唯一的數(shù)據(jù)訪問(wèn)抽象,包括簡(jiǎn)單和有效率的JDBC框架,極大的改進(jìn)了效率(大大減少了開發(fā)的代碼量)并且減少了可能的錯(cuò)誤。基于JDBC的異常信息也是完全遵循Spring的公共DAO異常層級(jí)。

          4. Spring的數(shù)據(jù)訪問(wèn)層集成了Toplink, Hibernate, JDO, and iBATIS SQL Maps O/R mapping解決方案,其目的是提供統(tǒng)一的DAO支持類實(shí)現(xiàn)和事務(wù)管理策略。尤其Hibernate對(duì)SpringIOC特性的支持,能更好的實(shí)現(xiàn)集 成,以更好的利用Spring的公共事務(wù)與DAO異常層級(jí)。

          5. Spring提供了一個(gè)用標(biāo)準(zhǔn)Java編寫的AOP框架(也能集成AspectJ),提供基于POJOs的聲明式的事務(wù)管理和其他企業(yè)事務(wù)--如果你需要 還能實(shí)現(xiàn)你自己的aspects。這個(gè)框架足夠強(qiáng)大,使得應(yīng)用程序能夠拋開EJB的復(fù)雜性,同時(shí)享受著和傳統(tǒng)EJB相關(guān)的關(guān)鍵服務(wù)。當(dāng)然也可以選擇不支持 JTA方式的開發(fā),尤其如不支持JTATomcat服務(wù)器下開發(fā)單數(shù)據(jù)庫(kù)應(yīng)用。

          6. 提供可以與IoC容器集成的強(qiáng)大而靈活的MVC Web框架. 其本身通過(guò)提供策略接口與多視圖支持技術(shù)(JSP, Velocity模塊引擎, Tiles, iTextPOI)實(shí)現(xiàn)框架的高可配置性。 Spring作為中間層也可以很容易的與其它第三方web MVC框架實(shí)現(xiàn)集成,如Struts,WebWork,Struct2(StrutsWebWork的集成)Tapestry.

          Spring bean對(duì)象生命周期管理

          Spring bean對(duì)象的生命周期管理包括Bean的創(chuàng)建裝配和Bean的銷毀兩個(gè)過(guò)程。在了解Spring bean對(duì)象生命周期管理內(nèi)容之前,首先來(lái)整理一下Spring對(duì)每個(gè)Bean進(jìn)行管理擴(kuò)展接口有哪些?

          BeanNameAware

          Spring在注冊(cè)當(dāng)前Bean到容器中時(shí),會(huì)把當(dāng)前BeanId值作為參數(shù)回調(diào)用到該接口方法

           

          BeanClassLoaderAware

          Spring在注冊(cè)當(dāng)前Bean到容器中時(shí),會(huì)把當(dāng)前Bean Class所屬的ClassLoader對(duì)象作為參數(shù)回調(diào)該接口方法

          BeanFactoryAware

          Spring在注冊(cè)當(dāng)前Bean到容器中時(shí),會(huì)把當(dāng)前Bean對(duì)象所屬的BeanFactory工廠對(duì)象實(shí)例作為參數(shù)回調(diào)該接口方法

          ResourceLoaderAware

          Spring在注冊(cè)當(dāng)前Bean到容器中時(shí),會(huì)把ResourceLoader對(duì)象實(shí)例作為參數(shù)回調(diào)該接口方法. ResourceLoader對(duì)象方便的提供基于Classpath方式的Resource文件查找和定位功能。例如:

          Resource template = rl.getResource("some/resource/path/myTemplate.txt");

           

          ApplicationEventPublisherAware

          Spring在注冊(cè)當(dāng)前Bean到容器中時(shí),會(huì)把ApplicationEventPublisher對(duì)象實(shí)例作為參數(shù)回調(diào)該接口方法. ApplicationEventPublisher對(duì)象用于對(duì)所有監(jiān)聽ApplicationListener接口事件的對(duì)象,發(fā)布ApplicationEvent事件。

          MessageSourceAware

          Spring在注冊(cè)當(dāng)前Bean到容器中時(shí),會(huì)把MessageSource對(duì)象實(shí)例作為參數(shù)回調(diào)該接口方法. MessageSource用于處理Spring的信息資源對(duì)象,如國(guó)際化信息處理

          ApplicationContextAware

          Spring在注冊(cè)當(dāng)前Bean到容器中時(shí),會(huì)把ApplicationContext對(duì)象實(shí)例作為參數(shù)回調(diào)該接口方法.

          ServletContextAware

          Spring在注冊(cè)當(dāng)前Bean到容器中時(shí),會(huì)把ServletContext對(duì)象實(shí)例作為參數(shù)回調(diào)該接口方法. 這個(gè)只在基于WebApplicationContext才會(huì)啟用

          BeanPostProcessors

          Spring在對(duì)Bean象進(jìn)行實(shí)例化前后,回調(diào)相應(yīng)的方法。

          InitializingBean

          Spring容器完成Bean對(duì)象所有properties屬性的依賴裝配后,回調(diào)該接口方法。

          DisposableBean

          Spring容器在執(zhí)行關(guān)閉操作時(shí),對(duì)Bean對(duì)進(jìn)行銷毀前,回調(diào)該接口方法

           

          了解相關(guān)的生命周期管理接口概念后,下面就比較容易整理SpringBean創(chuàng)建和銷毀的整個(gè)調(diào)用過(guò)程:

          Spring Bean創(chuàng)建過(guò)程如下:

          1

          觸發(fā) BeanNameAware setBeanName方法

          2

          觸發(fā)BeanClassLoaderAwaresetBeanClassLoader方法

          3

          觸發(fā)BeanFactoryAware's setBeanFactory

          4

          觸發(fā)ResourceLoaderAware's setResourceLoader (only applicable when running in an application context)

          5

          觸發(fā)ApplicationEventPublisherAwaresetApplicationEventPublisher方法 (只在由application context啟動(dòng)時(shí)工作)

          6

          觸發(fā)MessageSourceAware setMessageSource 方法(只在由application context啟動(dòng)時(shí)工作)

          7

          觸發(fā)ApplicationContextAware'setApplicationContext方法 (只在由application context啟動(dòng)時(shí)工作)

          8

          觸發(fā)ServletContextAwaresetServletContext 方法(web application context下啟用)

          9

          觸發(fā)BeanPostProcessorspostProcessBeforeInitialization方法

          10

          觸發(fā)InitializingBean afterPropertiesSet方法

          11

          觸發(fā)用戶在XML文件中配置的”init-method” 指定的方法名。不指定則跳過(guò)

          12

          觸發(fā)BeanPostProcessors postProcessAfterInitialization 方法

           

          Spring Bean銷毀過(guò)程如下:

          1

          觸發(fā) DisposableBeandestroy方法

          2

          觸發(fā)用戶在XML文件中配置的” destroy-method” 指定的方法名。不指定則跳過(guò)

          至此Spring Bean生命周期管理的核心內(nèi)容的介紹就到這里。

          本章節(jié)完.


          Good Luck!
          Yours Matthew!
          posted on 2011-03-14 19:24 x.matthew 閱讀(2453) 評(píng)論(3)  編輯  收藏 所屬分類: Spring|Hibernate|Other framework
          主站蜘蛛池模板: 东丽区| 甘南县| 博罗县| 司法| 白城市| 卢龙县| 阳山县| 裕民县| 博罗县| 宁南县| 呈贡县| 屏山县| 清镇市| 左贡县| 思南县| 临高县| 长武县| 永平县| 茶陵县| 莱阳市| 曲周县| 阿克| 阳春市| 沛县| 佛坪县| 绥中县| 江川县| 朝阳县| 青神县| 抚顺县| 大埔县| 翁牛特旗| 娄底市| SHOW| 柳河县| 颍上县| 常山县| 临清市| 乐安县| 莲花县| 白山市|