<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    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 閱讀(2451) 評論(3)  編輯  收藏 所屬分類: Spring|Hibernate|Other framework
    主站蜘蛛池模板: 最近中文字幕高清免费中文字幕mv| 久久国产一片免费观看| 精品熟女少妇a∨免费久久| 亚洲人成影院在线观看| fc2成年免费共享视频18| 亚洲午夜激情视频| 你是我的城池营垒免费观看完整版| 亚洲中文字幕无码不卡电影 | 亚洲小说图区综合在线| 欧亚精品一区三区免费| 亚洲精华国产精华精华液好用| 卡1卡2卡3卡4卡5免费视频| 无码天堂亚洲国产AV| 免费中文字幕一级毛片| 国产精品九九久久免费视频| 亚洲成AV人片在线观看WWW| 最新黄色免费网站| 亚洲乱码在线播放| 全免费a级毛片免费**视频| 美女黄色免费网站| 国产AV无码专区亚洲AWWW| 日本免费一区二区三区| 亚洲成人网在线观看| 午夜老司机免费视频| 九九免费观看全部免费视频| 亚洲av永久无码精品古装片| 国产91色综合久久免费分享| 亚洲av色香蕉一区二区三区| 亚洲国产V高清在线观看| 免费在线观看一级片| 亚洲天堂免费在线| 国产成人精品亚洲精品| 99在线在线视频免费视频观看| 亚洲综合无码一区二区痴汉| 亚洲精品麻豆av| 最近中文字幕国语免费完整| 亚洲欧美成aⅴ人在线观看| 曰韩亚洲av人人夜夜澡人人爽| 91高清免费国产自产| 男女作爱免费网站| 亚洲国产成人资源在线软件|