Spring之旅第一篇-初識Spring
一、概述
只要用框架開發java,一定躲不過spring,Spring是一個輕量級的Java開源框架,存在的目的是用於構建輕量級的J2EE應用。Spring的核心是控制反轉(IOC)和麵向切面程式設計(AOP)。Spring有如下特點:
-
輕量級:應用大小和應用開支,包括應用方式
-
DI/IoC:提供鬆耦合的一種實現技術
-
AOP:切面程式設計將業務邏輯從應用服務中分離
-
容器:包含並管理應用物件的生命週期和配置
-
框架:使用元件配置組合成複雜的應用,並提供很多基礎功能
由於spring是一個容器型的框架,所以它不排斥其他框架,並且可以輕鬆的整合其他框架。
Spring以一種非侵入式的方式來管理你的程式碼,Spring提倡”最少侵入”,這也就意味著你可以適當的時候安裝或解除安裝Spring 。
二、模組
Spring框架大約由20多個小模組組成,這些模組分為:核心容器,資料訪問/整合,Web,面向切面程式設計(AOP),訊息和測試等等,如下圖所示
下面逐一介紹這幾大模組:
1.核心容器:核心容器包括spring-core, spring-beans,spring-context, spring-context-support, 和spring-express,其中spring-core和spring-beans模組提供框架的基礎部分,包括控制反轉和依賴注入。BeanFactory是一個複雜的工廠模式的實現。上下文(spring-context)模組建立在Core和Bean模組的基礎之上:它提供了一種框架風格來訪問物件,類似於JNDI登錄檔。Context模組繼承了Bean模組的特點並增加了對國際化、事件傳播、資源載入等的支援。ApplicationContext介面是Context模組的焦點。spring-context-support支援將第三方庫整合到Spring應用中,例如快取,JavaMail、模板引擎等。spring-expression模組為執行時查詢和操作物件提供了強大的表示式語言,它是JSP2.1中的EL語言的擴充套件,這種語言支援設定和獲取屬性值,屬性賦值,方法呼叫,訪問陣列,邏輯和算術運算子,還支援列表投影、選擇和常見的聚合。
2.面向切面:Spring的AOP封裝包提供了符合AOP Alliance規範的面向切面的程式設計實現,讓你可以定義,例如方法攔截器和切點,從邏輯上講,從而減弱程式碼的功能耦合,清晰的被分離開。
3.訊息傳送:Spring FrameWork 4包括一個spring-messaging模組,它是從Spring整合專案的關鍵抽象,如Message, MessageChannel,MessageHandle。該模組該包含一組註釋對映訊息的方法,類似Spring MVC基於註釋的程式設計模型。
4.資料訪問/整合:這一層包括JDBC、ORM、OXM、JMS和事務模組。spring-jdbc模組提供了一個JDBC抽象層從而消除了令人乏味的JDBC程式設計和解析資料庫提供商特定的錯誤。spring-tx模組支援類的程式設計和宣告式事務管理,實現特殊的介面和你的POJO(Plain Old Java Objects)。spring-orm模組提供了流行的物件-關係對映整合層API,包括JPA、JDO和Hibernate。使用spring-orm模組可以使這ORM框架結合Spring提供的其他特性,比如前面提到的簡單的宣告式事務管理。spring-oxm模組提供了一個抽象層,支援物件/XML對映的實現,如JAXB、 Castor、XMLBeans、 JiBX和XStream。
5.網路層:包括spring-web、spring-webmvc、spring-websocket和spring-webmvc-portlet模組。spring-web模組提供基礎的針對web開發的整合特性,包括檔案上傳功能、利用Servlet偵聽器進行IOC容器初始化和針對web的應用上下文。它還包括一個HTTP客戶端和Spring的web部件的遠端支援。spring-webmvc模組包括Spring的MVC模型和REST Web服務實現的web應用程式,Spring的MVC框架提供了一種清晰的分離模型,在領域模型程式碼和web form之間,並且還可以藉助Spring框架的其他特性。
6.測試層:spring-test模組支援單元測試和包含Junit或者TestNG的整合測試,它提供了Spring的ApplicationContext一致性裝載和這些上下文的快取機制,它還提供了可用於測試程式碼隔離的模擬物件。
三、動手建立
概念先講到這,先上手建立專案找找感覺。使用的是idea開發工具。建立專案開始(使用maven構建)
在Groupid中填入專案的包名即可。Artifactid自定義即可,這裡建議與專案名稱一致。版本預設在Groupid中填入專案的包名即可。Artifactid自定義即可,這裡建議與專案名稱一致。版本預設.
另外的是maven相關設定,不懂得同學可以先去學學maven,專案中都是必學的
選擇檔案位置
建立完成,專案架構如圖(img與md檔案是說明檔案,不計其中)
在main下新建資料夾resources用於存放資原始檔
在resources上右鍵,選擇mark directory as 選中Resources Root
新增spring依賴包
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.2.6.RELEASE</version> </dependency>
pom.xml的完整配置如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.yuanqinnan</groupId> <artifactId>springLearn</artifactId> <version>1.0-SNAPSHOT</version> <name>springLearn</name> <!-- FIXME change it to the project's website --> <url>http://www.example.com</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.2.6.RELEASE</version> </dependency> </dependencies> <build> </build> </project>
在剛才新建的resources下新建META-INF包,在META-INF下新建applicationContext.xml.
檔案內容如下
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> </beans>
新建test包和HelloWorld.java,Main.java結構如下:
程式碼如下:
public class HelloWorld { private String info; public String getInfo() { return info; } public void setInfo(String info) { this.info = info; } } public class Main { public static void main(String[] args) { //讀取配置檔案 ApplicationContext ctx=new ClassPathXmlApplicationContext("META-INF/applicationContext.xml"); //獲取bean的例項 HelloWorld t=(HelloWorld) ctx.getBean("hello"); //呼叫方法 System.out.println(t.getInfo()); } }
在applicationContext.xml中配置bean
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="hello" class="com.yuanqinnan.test.HelloWorld"> <property name="info" value="Hello,This is my first Spring Application!"></property> </bean> </beans>
右鍵執行Main
得到結果:
如此,一個spring