翟高粵
摘 要:Spring是當今流行的Java Web開發框架,它能解決大部分企業應用開發的復雜性問題。對于Java開發人員來說,掌握Spring框架的基本使用,已是入職Java軟件開發行業的必備技能之一。本文主要介紹Spring框架及其體系結構的基本內容及應用,并通過一個實例說明Spring框架的基本使用方法,理解Spring框架中IoC及DI的基本思想,對于Spring的入門學習有一定參考價值。
關鍵詞:Spring框架;Java EE;IoC;DI
一、引言
Spring 是在2003年興起的一個輕量級的Java應用開發框架,它是為了解決企業應用開發的復雜性而創建的。Spring 的核心是控制反轉(IoC)和面向切面編程(AOP)。Spring 是可以在 Java SE/EE 中使用的輕量級開源框架。Spring通過使用基本的JavaBean來實現以前只能由EJB(企業JavaBean)完成的工作,一面世即迅速取代EJB臃腫、低效的開發模式,受到大批JAVA開發者的歡迎和支持。Spring致力于JavaEE應用各層的解決方案,在表現層它提供了SpringMVC以及與Struts框架的整合功能;在業務邏輯層可以管理事務、記錄日志等;在持久層可以整合MyBatis、Hibernate、JdbcTemplate等技術。因此,Spring框架是企業應用開發很好的框架之一。
二、相關理論
(一)Spring框架的特點
Spring具有簡單、可測試和松耦合等特點,Spring不僅可以用于服務器端的開發,也可以用于任何Java軟件開發中。具體有如下特點:
(1)非侵入式設計
(2)方便解耦,簡化開發
(3)支持AOP
(4)支持聲明式事務處理
(5)方便程序測試
(6)方便集成各種框架
(7)降低Java EE API的使用難度
(二)Spring的體系結構
Spring框架采用的分層設計架構,它根據一系列的功能分成20個模塊,具體如圖1所示。接下來對主要核心模塊進行簡單介紹。
(1)Core Container(核心容器)
Spring的核心容器是其他模塊建立的基礎,它主要由Beans模塊、Core模塊、Context模塊、Context-support模塊和SpEL模塊構成。Beans模塊提供了工廠模式的經典實現;Core模塊提供了Spring框架的基本組成部分,包括IcC和DI功能;Context模塊建立在Core和Beans模塊的基礎上,它是訪問定義和配置的任何對象的媒介;Context-support提供了對第三方庫嵌入Spring應用的集成支持;SpEL模塊提供了Spring Expression Language支持,是運行時查詢和操作對象圖的強大的表達式語言。
(2)Data Access/Integration(數據訪問/集成)
數據訪問集成包括JDBC、ORM、OXM、JMS和Transactions模塊。JDBC模塊提供了一個JDBC的抽象層,大幅度地減少了在開發過程中對數據庫操作的編碼;ORM提供了對流行的對象關系映射API,包括JPA、JDO和Hibernate提供了集成層支持;OXM模塊提供了一個支持對象/OXM映射的抽象層實現;JMS模塊指的是Java的消息傳遞服務;Transactions事務模塊支持對實現特殊接口以及所有POJO類的編程和聲明式的事務管理。
(3)Web
Spring的Web層包括WebSocket、Servlet、Web和Portlet模塊。WebSocket模塊提了WebSocket和SockJS的實現,以及對STOMP的支持;Servlet模塊提供了Spring的模型-視圖-控制器(MVC)和REST WebServices實現的Web應用程序;Web模塊提供了基本的Web開發集成特性;Portlet模塊提供了在Portlet環境中使用MVC實現,類似Servlet模塊的功能。
(4)其他模塊
Spring的其他模塊有AOP、Aspects、Instrumentation以及Test模塊。AOP模塊提供了面向切面編程實現,允許定義方法攔截器和切入點,將代碼按照功能進行分離,以降低耦合性;Aspects模塊提供了與AspectsJ的集成功能,AspectsJ是一個功能強大且成熟的面向切面編程(AOP)框架;Instrumentation模塊提供了類工具的支持和類加載器的實現,可以在特定的應用服務器中使用;Messaging模塊提供了對消息傳遞體系結構和協議的支持;Test模塊提供了對單元測試和集成測試的支持;
三、Spring核心容器
Spring框架的主要功能是通過其核心容器來實現的,Sping框架提供了兩種核心容器,分別為BeanFactory和ApplicationContext。
(一)BeanFactory容器
BeanFactory是由org.springframework.beans.factory.BeanFactory接口定義,是基礎類型的IoC容器,它提供了完整的IoC服務支持。BeanFactory是一個管理Bean的工廠,它主要負責初始化各種Bean,并調用它們的生命周期方法。
BeanFactory接口提供幾個實現類,其中最常用的是XmlBeanFactory,該類會通過XML配置文件中的定義來裝配Bean,語法實例如下:
BeanFactory beanFactory=new
XmlBeanFactory(new FileSystemResource(“c:/applicationContext.xml”);
(二)ApplicationContext
ApplicationContext是BeanFactory的子接口,也被稱為應用上下文,是另一種Spring核心容器。它由org.springframework.context.ApplicationContext接口定義,不僅包含了BeanFactory的所有功能,還添加了對國際化、資源訪問、事件傳播等方面的支持。創建ApplicationContext接口實例,通常采用兩種方法。
(1)通過ClassPathXmlApplicationContext創建
ClassPathXmlApplicationContext會從類路徑classPath中尋找指定的XML配置文件,找到并加載ApplicationContext的實例化工作,其使用語法如下:
ApplicationContext applicationContext=new ClassPathXmlApplicationContext(String configLocation)
(2)通過FileSystemXmlApplicationContext會從指定的文件系統路徑中尋找指定的XML配置文件,找到并裝載完成ApplicationContext的實例化工作,其使用語法如下:
ApplicationContext applicationContext=new FileSystemXmlApplicationContext(String configLocation)
與ClassPathXmlApplicationContext有所不同的是,在讀取Spring的配置文件時,FileSystemXmlApplicationContext不再從類路徑中讀取配置文件,而是通過參數指定配置文件的位置,這種采用絕對路徑的方式,會導致程序的靈活性變差,所以這種方法一般不推薦使用。
(三)Spring編程實現
以上是對Spring的核心容器的介紹,接下來通過一個實例說明Spring框架的編程步驟。
(1)在MyEclipse中,創建一個名為firstSpring的Web項目,將Spring的4個基礎包以及commons-logging的JAR包復制到lib目錄中,并發布到類路徑下,如圖2所示。
(2)在src目錄下,創建一個com.szjm.ioc包,并在包中創建接口UserDao,然后在接口中定義一個say()方法,代碼如下所示。
public interface UserDao{
public void say();}
(3)在com.szjm.ioc包下,創建UserDao接口的實現類UserDaoImpl,該類需要實現接口中的say()方法,并編寫一條輸出語句,代碼如下所示。
public class UserDaoImpl implements UserDao {
public void say() {
System.out.println("userDao say hello World !");
}
}
(4)在src目錄下,創建Spring的配置文件applicationContext.xml,并在配置文件中創建一個id為userDao的Bean,代碼如下所示。
<!-- 將指定類配置給Spring,讓Spring創建其對象的實例 -->
(5)在com.szjm.ioc包下,創建測試類TestIoC,并在類中編寫main() 方法,該main()方法需要初始化Spring容器,并加載配置文件,然后通過Spring容器獲取userDao實例,最后調用實例中的say()方法,代碼如下所示。
public class TestIoC {
public static void main(String[] args) {
ApplicationContext applicationContext =
new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao = (UserDao) applicationContext.getBean("userDao");
userDao.say();
}
}
執行上述程序后,在控制臺的輸出結果如下所示。
四、結論
本文主要介紹Spring框架的基礎知識及一般應用。首先講解了Spring框架的概念、作用、優點、體系結構,然后介紹了Spring的兩種核心容器,接下來通過一個實例來說明如何使用Spring框架,并初步掌握Spring框架的使用方法。
參考文獻:
[1]沃爾斯. Spring實戰 [M]. 人民郵電出版社,2016.
[2]卡內爾. Spring開發三劍客[M],人民郵電出版社, 2020.
[3] 陳恒等. Spring Boot從入門到實戰[M]. 清華大學出版社出版社,2020.