Spring 結構

忘塵天外天發表於2017-09-26

  Spring框架主要由7大模組組成,它們提供了企業級開發需要的所有功能,而且每個模組都可以單獨使用,也可以和其它模組組合使用,靈活且方便的部署可以使開發的程式更加簡單靈活。

  核心模組

  Spring Core模組是Spring的核心容器,它實現了IoC模式、提供了Spring框架的基礎功能。在模組中包含最重要的BeanFactory類是Spring的核心類,負責對JavaBean的配置與管理。它採用Factory模式實現了IoC容器即依賴注入。

  Content模組

  Spring Content模組繼承BeanFactory(或者說Spring核心)類,並且新增了事件處理、國際化、資源裝載、透明裝載以及資料效驗等功能。它還提供了框架式的bean的訪問模式和很多企業級的功能,如JNDI訪問、支援EJB、遠端呼叫、繼承模板框架、Email和定時任務排程等。

  AOP 模組

  Spring整合了所有AOP功能。通過事務管理可以使任意Spring管理的物件AOP化。Spring提供了標準Java語言編寫的AOP框架,它的大部分內容都是根據AOP聯盟的API而開發的。它使應用程式拋開了EJB的複雜性,但擁有傳統EJB的關鍵功能。

  DAO模組

  DAO模組提供了JDBC的抽象層,簡化了資料廠商的異常錯誤(不再從SQLException繼承大批程式碼),大幅減少了程式碼的編寫,並且提供了宣告式事務和程式設計式事務的支援。

  O/R對映模組

  Spring ORM模組提供了對現有ORM框架的支援,各種流行的ORM框架已經做得非常成熟,並且擁有大規模的市場(如Hibernate)。Spring沒必要開發新的ORM工具,但是它對Hibernate提供了完美的整合功能,同時也支援其它的ORM工具。

  Web模組

  Spring Web模組建立在Spring  Context基礎之上,它提供了Servlet監聽器的Context 和Web 應用的上下文。對現有的Web框架如JSF、Tapestry、Struts2等提供了整合。

  MVC模組

  Spring MVC模組建立在Spring核心功能之上,這使它擁有Spring框架的所有特性,能夠適應多種檢視、模板技術、國際化和驗證服務,實現控制邏輯和業務邏輯清晰的分離。

  使用BeanFactory管理bean

  BeanFactory採用了Java經典的工廠模式,通過從XML配置檔案或屬性檔案(.properties)中讀取JavaBean的定義,來實現JavaBean的建立、配置和管理。BeanFactory有很多實現類,其中XmlBeanFactory可以通過流行的XML檔案格式讀取配置資訊裡裝載JavaBean。BeanFactory在Spring中的作用:

裝載bean:

 Resource resource = new  ClassPathResource("applicationContext.xml");  //裝載配置檔案 
 BeanFactory  factory  = new XmlBeanFactory(resource) ;
 Test  test = factory.getBean("test") ;      //獲取bean

 ClassPathResource讀取XML檔案並傳參給XmlBeanFactory,   applicationContext.xml檔案中的程式碼包含一個bean標籤

    <?xml version="1.0"  encoding="UTF-8" ?>
    <!DOCTYPE  beans PUBLIC "-//SPRING//DTD BEAN//EN“ "http://www.springframework.org/dtd/spring-beans.dtd">
    <beans>
        <bean id="test" class="com.model.Test">
    </beans>

    在<beans>標籤中通過<bean>標籤定義JavaBean的名稱和型別,在程式程式碼中利用BeanFactory的getBean()方法獲取JavaBean的例項並且向上轉為需要的介面型別,這樣在容器中就開始了這個JavaBean的生命週期。BeanFactory在呼叫getBean()方法之前不會例項化任何物件,只有在需要建立JavaBean的例項物件時,才會為其分配資源空間。這使它更適合於物理資源受限的應用程式,尤其是記憶體限制的環境。Spring中bean的宣告週期包括例項化JavaBean、初始化JavaBean、使用JavaBean和銷燬JavaBean4個階段。

  ApplicationContext 的應用

  BeanFactory實現了IoC控制,所以它可以稱為IoC容器,而ApplicationContext擴充套件了BeanFactory容器並新增了對I18N(國際化)、宣告週期事件的釋出監聽等更加強大的功能,使之成為Spring中強大的企業級IoC容器。在這個容器中提供了對其它框架和EJB的整合、遠端呼叫、WebService、任務排程和JNDI等企業級服務,同時也允許使用更多的宣告式方式來得到需要的功能。在Spring應用中大多采用ApplicationContext容器來開發企業級的程式。

   ApplicationContext 介面有3個實現類,可以例項化其中任何一個類來建立Spring的ApplicationContext容器。第一個類是ClassPathXmlApplicationContext類。它從當前路徑中檢索配置檔案並裝載它來建立容器的例項。語法:

  ApplicationContext  context = new ClassPathXMLApplicationContext(String  configLocation);

其中的configLocation引數指定了Spring配置檔案的名稱和位置。

  第二個實現類是:FileSystemXMLApplicationContext類。它和ClassPathXMLApplicationContext類的區別在於讀取Spring配置檔案的方式,它不再從類路徑中獲取配置檔案,而是通過引數指定配置檔案的位置,可以獲取類路徑之外的資源。語法:

  ApplicationContext  context  =  new  FileSystemXMLApplicationContext(String  configLocaation);

   第三個實現類是:WebApplicationContext類。它是Spring的Web應用容器,有兩種方法可以在Servlet中使用WebApplicationContext。第一種方法是在Servlet的web.xml穩健者配置Spring的ContextLoaderListener監聽器;第二種方法是修改web.xml配置檔案,在配置檔案中新增一個Servlet,定義使用Spring的org.springframework.web.context.ContextLoaderServlet類。

  JavaBean在ApplicationContext容器和BeanFactory容器中的生命週期基本相同。如果在JavaBean中實現了ApplicationContext介面,容器會呼叫JavaBean的setApplicationContext()方法將容器本身注入到JavaBean中,使JavaBean包含容器的應用。

 

 

 

 

 

 

 

 

 

 

 

 

相關文章