Spring概述

Spring概述簡介優勢總體架構建立測試項目參考文獻html

Spring概述

簡介

  • Spring 是一個開源的設計層面框架,它解決的是業務邏輯層和其餘各層的鬆耦合問題,所以它將面向接口的編程思想貫穿整個系統應用。
  • 2002 年,Rod Jahnson 首次推出了 Spring 框架雛形 interface21 框架。
  • 2004 年3月24日,Spring 框架以 interface21 框架爲基礎,通過從新設計,發佈了 1.0正式版。
  • 簡單來講,Spring 是一個分層的 JavaSE/EE full-stack(一站式) 輕量級開源框架。

官網: spring.io/java

官方下載地址: repo.spring.io/libs-releas…git

GitHub: github.com/spring-proj…github

優勢

  • Spring 是一個開源免費的框架,容器;
  • Spring 是一個輕量級的框架,非入侵式的;
  • 控制反轉 IoC,面向切面編程 AOP;
  • 對事務的支持,對框架的支持。

一句話歸納:Spring 是一個輕量級的控制反轉(IoC)和麪向切面(AOP)的開源容器(框架)。web

總體架構

Spring 框架是一個分層架構,它包含一系列的功能要素,並被分爲大約20個模塊,以下圖所示:spring


從上圖 spring framework 總體架構圖能夠看到,這些模塊被總結爲如下幾個部分:

一、Core Container數據庫

Core Container(核心容器)包含有 Core、Beans、Context 和 SpEL 模塊。其中 Core 和 Beans 模塊是框架的基礎部分,提供 IoC(控制反轉)和依賴注入功能。核心容器的主要組件是 BeanFactory,它是工廠模式的實現。BeanFactory 使用控制反轉(IoC)模式將應用程序的配置和依賴性規範與實際的應用程序代碼分開。apache

Core 模塊主要包含 Spring 框架基本的核心工具類。編程

Beans 模塊是全部應用都要用到的,它包含訪問配置文件、建立和管理 bean 以及進行 Inversion of Control/Dependency Injection(Ioc/DI) 操做相關的全部類。數組

Context 模塊構建於 Core 和 Beans 模塊基礎之上,提供了一種相似於 JNDI 註冊器的框架式的對象訪問方法。Context 模塊繼承了 Beans 的特性,爲 Spring 核心提供了大量的擴展,添加了對國際化(如資源綁定)、事件傳播、資源加載和對 Context 的透明建立的支持。ApplicationContext 接口是 Context 模塊的關鍵。

SpEL 全稱爲「 Spring Expression Language 」,它是個單獨模塊,只依賴於 Core 模塊,不依賴於其餘模塊,能夠單獨使用。該模塊提供了一個強大的表達式語言用於在運行時查詢和操縱對象,該語言支持設置/獲取屬性的值,屬性的分配,方法的調用,訪問數組上下文、容器和索引器、邏輯和算術運算符、命名變量以及從 Spring 的 IoC 容器中根據名稱檢索對象。

二、Data Access/Integration

JDBC 模塊提供了一個 JDBC 抽象層,它能夠消除冗長的 JDBC 編碼和解析數據庫廠商特有的錯誤代碼,這個模塊包含了 Spring 對 JDBC 數據訪問進行封裝的全部類。

ORM 模塊爲流行的對象-關係映射 API,如 JPA、JDO、Hibernate、iBatis 等,提供了一個交互層,利用 ORM 封裝包,能夠混合使用全部 Spring 提供的特性進行 O/R 映射,如前邊提到的簡單聲明性事務管理。

OXM 模塊提供了一個 Object/XML 映射實現的抽象層,Object/XML 映射實現抽象層包括 JAXB、Castor、XMLBeans、JiBX 和 XStream。

JMS(java Message Service)模塊主要包含了一些製造和消費消息的特性。

Transaction 模塊支持編程和聲明式事物管理,這些事務類必須實現特定的接口,而且對全部 POJO 都適用 。

三、Web

Web 上下文模塊創建在應用程序上下文模塊之上,爲基於 Web 的應用程序提供了上下文,因此 Spring 框架支持與 Jakarta Struts 的集成。Web 模塊還簡化了處理多部分請求以及將請求參數綁定到域對象的工做。Web 層包含了 Web、 Web-Servlet、Web-Struts和Web、Porlet模塊 。

Web 模塊:提供了基礎的面向 Web 的集成特性,例如:多文件上傳、使用 Servlet、Listeners 初始化 IoC 容器以及一個面向 Web 的應用上下文,它還包含了 Spring 遠程支持中 Web 的相關部分。

Web-Servlet 模塊 web.servlet.jar:該模塊包含 Spring 的 Model-View-Controller(MVC)實現,Spring 的 MVC 框架使得模型範圍內的代碼和 web forms 之間可以清楚地分離開來,經過策略接口,MVC 框架變成爲高度可配置的,MVC 容納了大量視圖技術,其中包括 JSP、Velocity、Tiles、iText 和 POI。

Web-Struts 模塊:該模塊提供了對 Struts 的支持,使得類在 Spring 應用中可以與一個典型的 Struts Web 層集成在一塊兒。

Web-Porlet 模塊:提供了用於 Portlet 環境和 Web-Servlet 模塊的 MVC 的實現。

四、AOP

AOP 模塊: 經過配置管理特性,Spring AOP 模塊直接將面向切面的編程功能 , 集成到了 Spring 框架中。因此,能夠很容易地使 Spring 框架管理任何支持 AOP的對象。Spring AOP 模塊爲基於 Spring 的應用程序中的對象提供了事務管理服務。經過使用 Spring AOP,不用依賴組件,就能夠將聲明性事務管理集成到應用程序中。

五、Test

Test 模塊支持使用 Junit 和 TestNG 對 Spring 組件進行測試。


建立測試項目

一、新建 maven 項目,引用對 spring 的依賴

新建一個空白的 maven 項目 ,以下圖所示:

最後在 pom.xml 文件中添加對 Spring 模塊的依賴。

<?xml version="1.0" encoding="UTF-8"?>
<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.msdn</groupId>
    <artifactId>spring_study</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>spring-chap1</module>
    </modules>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.2.RELEASE</version>
        </dependency>
    </dependencies>

</project>
複製代碼

爲了方便後期的學習,咱們把每一個不一樣的測試案例放在不一樣的 Module 下,而不用每次都新建一個 Project,也方便後期複習。

把上述新建的項目下的 src 文件夾刪除掉,而後點擊項目根目錄,右鍵 new 一個 Module。

以後的步驟就和上述同樣。

二、在 src/main/resource 下添加 application_context.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">


    <bean id="user" class="com.msdn.bean.User"/>

</beans>
複製代碼

三、 建立測試 bean 和啓動類

public class User {
    private String name;

    public User() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                '}';
    }
}
複製代碼
public class MyBeanTest {

    @Test
    public void MyBean(){
        ApplicationContext context = new ClassPathXmlApplicationContext("application_context.xml");
//        BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("application_context.xml"));//XmlBeanFactory類已過期
        User user = (User) context.getBean("user");
        user.setName("hresh");
        System.out.println(user);
    }
}
複製代碼

執行結果爲:

上述使用到了 IoC 的知識,主要是爲了測試項目的成功構建,後續章節會詳細講解關於 IoC 的內容。


參考文獻

https://www.cnblogs.com/java-chen-hao/p/11046190.html

相關文章
相關標籤/搜索