posts - 156,  comments - 601,  trackbacks - 0

          前言:

          本塊文章會通過連載的方式來深入了解和學習Spring相關核心技術和實現原理。包括SpringBean生命周期管理,聲明性事務管理,AOP管理,注解應用實現,以及在其上面進行擴展的相關應用進行介紹。

          本篇技術文章將作為Spring入門篇。

          什么是Spring開發框架?

          Spring 是一個基于Java/JavaEE的應用開發平臺。其實現是由作者Rod Johnson2002年出版《Expert One-on-One J2EE Design and Development》一書后,總結經驗后,研發而成。
          Spring
          的核心內容包括:
          1.
          輕量級的容器, 提供集中式,自動配置與裝配應用業務對象功能。

          Spring提供了管理業務對象的一致方法并且鼓勵了注入對接口編程而不是對類編程的良好習慣。Spring的架構基礎是基于使用POJO對象管理的 Inversion of Control(控制反轉)容器,提供非侵入的方式為當前一些復雜的系統應用提供松耦合,一致性的業務對象配置管理。容器以快捷開發為出發點,方便開發中 的可測試性和部署時的可擴展性為目的。實現只針對單個業務組件在獨立環境的下進行開發與測試,在部署時再集成到任意的Java SEJava EE環境中。

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

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

          4. Spring的數據訪問層集成了Toplink, Hibernate, JDO, and iBATIS SQL Maps O/R mapping解決方案,其目的是提供統一的DAO支持類實現和事務管理策略。尤其HibernateSpringIOC特性的支持,能更好的實現集 成,以更好的利用Spring的公共事務與DAO異常層級。

          5. Spring提供了一個用標準Java編寫的AOP框架(也能集成AspectJ),提供基于POJOs的聲明式的事務管理和其他企業事務--如果你需要 還能實現你自己的aspects。這個框架足夠強大,使得應用程序能夠拋開EJB的復雜性,同時享受著和傳統EJB相關的關鍵服務。當然也可以選擇不支持 JTA方式的開發,尤其如不支持JTATomcat服務器下開發單數據庫應用。

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

          Spring bean對象生命周期管理

          Spring bean對象的生命周期管理包括Bean的創建裝配和Bean的銷毀兩個過程。在了解Spring bean對象生命周期管理內容之前,首先來整理一下Spring對每個Bean進行管理擴展接口有哪些?

          BeanNameAware

          Spring在注冊當前Bean到容器中時,會把當前BeanId值作為參數回調用到該接口方法

           

          BeanClassLoaderAware

          Spring在注冊當前Bean到容器中時,會把當前Bean Class所屬的ClassLoader對象作為參數回調該接口方法

          BeanFactoryAware

          Spring在注冊當前Bean到容器中時,會把當前Bean對象所屬的BeanFactory工廠對象實例作為參數回調該接口方法

          ResourceLoaderAware

          Spring在注冊當前Bean到容器中時,會把ResourceLoader對象實例作為參數回調該接口方法. ResourceLoader對象方便的提供基于Classpath方式的Resource文件查找和定位功能。例如:

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

           

          ApplicationEventPublisherAware

          Spring在注冊當前Bean到容器中時,會把ApplicationEventPublisher對象實例作為參數回調該接口方法. ApplicationEventPublisher對象用于對所有監聽ApplicationListener接口事件的對象,發布ApplicationEvent事件。

          MessageSourceAware

          Spring在注冊當前Bean到容器中時,會把MessageSource對象實例作為參數回調該接口方法. MessageSource用于處理Spring的信息資源對象,如國際化信息處理

          ApplicationContextAware

          Spring在注冊當前Bean到容器中時,會把ApplicationContext對象實例作為參數回調該接口方法.

          ServletContextAware

          Spring在注冊當前Bean到容器中時,會把ServletContext對象實例作為參數回調該接口方法. 這個只在基于WebApplicationContext才會啟用

          BeanPostProcessors

          Spring在對Bean象進行實例化前后,回調相應的方法。

          InitializingBean

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

          DisposableBean

          Spring容器在執行關閉操作時,對Bean對進行銷毀前,回調該接口方法

           

          了解相關的生命周期管理接口概念后,下面就比較容易整理SpringBean創建和銷毀的整個調用過程:

          Spring Bean創建過程如下:

          1

          觸發 BeanNameAware setBeanName方法

          2

          觸發BeanClassLoaderAwaresetBeanClassLoader方法

          3

          觸發BeanFactoryAware's setBeanFactory

          4

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

          5

          觸發ApplicationEventPublisherAwaresetApplicationEventPublisher方法 (只在由application context啟動時工作)

          6

          觸發MessageSourceAware setMessageSource 方法(只在由application context啟動時工作)

          7

          觸發ApplicationContextAware'setApplicationContext方法 (只在由application context啟動時工作)

          8

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

          9

          觸發BeanPostProcessorspostProcessBeforeInitialization方法

          10

          觸發InitializingBean afterPropertiesSet方法

          11

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

          12

          觸發BeanPostProcessors postProcessAfterInitialization 方法

           

          Spring Bean銷毀過程如下:

          1

          觸發 DisposableBeandestroy方法

          2

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

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

          本章節完.


          Good Luck!
          Yours Matthew!
          posted on 2011-03-14 19:24 x.matthew 閱讀(2453) 評論(3)  編輯  收藏 所屬分類: Spring|Hibernate|Other framework
          主站蜘蛛池模板: 启东市| 寻乌县| 灵丘县| 中阳县| 洞头县| 黄骅市| 宣武区| 花垣县| 高阳县| 靖西县| 涞水县| 常山县| 莱州市| 唐河县| 枣阳市| 来宾市| 浏阳市| 错那县| 眉山市| 原阳县| 金门县| 吉林省| 长兴县| 青冈县| 安新县| 万州区| 全椒县| 深水埗区| 洛南县| 黄山市| 开阳县| 东辽县| 桃源县| 宜兰县| 兖州市| 志丹县| 满城县| 大石桥市| 会泽县| 通渭县| 陇西县|