1. 程式人生 > >Spring之旅第一篇-初識Spring

Spring之旅第一篇-初識Spring

一、概述

只要用框架開發java,一定躲不過spring,Spring是一個輕量級的Java開源框架,存在的目的是用於構建輕量級的J2EE應用。Spring的核心是控制反轉(IOC)和麵向切面程式設計(AOP)。Spring有如下特點:

  1. 輕量級:應用大小和應用開支,包括應用方式

  2. DI/IoC:提供鬆耦合的一種實現技術

  3. AOP:切面程式設計將業務邏輯從應用服務中分離

  4. 容器:包含並管理應用物件的生命週期和配置

  5. 框架:使用元件配置組合成複雜的應用,並提供很多基礎功能

由於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