Spring框架入門

Z_Z_S發表於2021-10-16

一. spring是什麼?

      Spring是分層的JavaSE/EE (一站式) 輕量級開源的容器框架,以IOC(Inverse of Control 控制反轉:物件之間的關係由容器建立,降低了程式之間的依賴性)和AOP(Aspect Oriented Programming 面向切面程式設計)為核心的容器框架

一站式、分層:

JavaEE的有三層結構:web層、業務層、資料訪問層(持久層,整合層),而Spring框架有對三層的每層解決方案:

web層:Spring MVC

持久層:JDBC Template (applicationContext.xml)

業務層:Spring的Bean管理(Bean:是spring根據使用者提供相應的需求建立的物件,由IOC管理)(service)

 

spring官網:https://spring.io/

二.spring受歡迎的原因

     Spring的英文翻譯為春天,可以說是給Java程式設計師帶來了春天,因為它極大的簡化了開發,有效的解決了當時軟體開發比較複雜的問題(當時採用EJB開發JAVA EE應用,但EJB存在著學習成本太高,開發效率比較低,資源消耗很高的問題)。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅限於伺服器端的開發。從簡單性、可測試性和鬆耦合的角度而言,任何Java應用都可以從Spring中受益。可以說Spring是一個提供了更完善開發環境的一個框架,可以為POJO(Plain Ordinary Java Object)物件提供企業級的服務。

Spring的優秀之處:

1、最完善的輕量級核心框架。

2、簡化了開發,方便解耦

3、 宣告式事務的支援:只需要通過配置就可以完成對事務的管理,而無需手動程式設計

4、整合了Toplink, Hibernate, JDO, and iBATIS SQL Maps等優秀框架。

5、強大的AOP功能:Spring提供面向切面程式設計,可以方便的實現對程式進行許可權攔截、執行監控等功能。

6、 方便程式的測試:Spring對Junit4支援,可以通過註解方便的測試Spring程式

三.spring框架的七大組成模組

3.1 核心容器模組

這是Spring框架最基礎的部分,所有的Spring模組都是在核心容器之上構建的。它提供了依賴注入(DependencyInjection)特徵來實現容器對Bean的管理。這裡最基本的概念是BeanFactory,它是任何Spring應用的核心。BeanFactory是工廠模式的一個實現,它使用IOC(控制反轉)將應用配置和依賴說明從實際的應用程式碼中分離出來。

3.2 應用上下文(Context)模組(.xml檔案)

核心模組的BeanFactory使Spring成為一個容器,而上下文模組使它成為一個框架。這個模組擴充套件了BeanFactory的概念,增加了對國際化(I18N)訊息、事件傳播以及驗證的支援(Spring 上下文是一個配置檔案,向 Spring 框架提供上下文資訊)。

另外,這個模組提供了許多企業服務,例如電子郵件、JNDI訪問、EJB整合、遠端以及時序排程(scheduling)服務。也包括了對模版框架例如Velocity和FreeMarker整合的支援。

3.3 Spring的AOP模組

Spring在它的AOP模組中提供了對面向切面程式設計的豐富支援。這個模組是在Spring應用中實現切面程式設計的基礎。為了確保Spring與其它AOP框架的互用性,Spring的AOP支援基於AOP聯盟定義的API。AOP聯盟是一個開源專案,它的目標是通過定義一組共同的介面和元件來促進AOP的使用以及不同的AOP實現之間的互用性。通過訪問他們的站點,你可以找到關於AOP聯盟的更多內容。

Spring的AOP模組也將後設資料程式設計引入了Spring。使用Spring的後設資料支援,你可以為你的原始碼增加註釋,指示Spring在何處以及如何應用切面函式。

3.4 JDBC抽象和DAO模組

使用JDBC經常導致大量的重複程式碼,取得連線、建立語句、處理結果集,然後關閉連線。Spring的JDBC和DAO模組抽取了這些重複程式碼,因此你可以保持你的資料庫訪問程式碼乾淨簡潔,並且可以防止因關閉資料庫資源失敗而引起的問題。

這個模組還在幾種資料庫伺服器給出的錯誤訊息之上建立了一個有意義的異常層。使你不用再試圖破譯神祕的私有的SQL錯誤訊息!

另外,這個模組還使用了Spring的AOP模組為Spring應用中的物件提供了事務管理服務。

3.5 物件/關係對映整合模組

對那些更喜歡使用物件/關係對映工具而不是直接使用JDBC的人,Spring提供了ORM模組。Spring並不試圖實現它自己的ORM解決方案,而是為幾種流行的ORM框架提供了整合方案,包括Hibernate、JDO和iBATIS SQL對映。Spring的事務管理支援這些ORM框架中的每一個也包括JDBC。

3.6 Spring的Web模組

Web上下文模組建立於應用上下文模組之上,提供了一個適合於Web應用的上下文。另外,這個模組還提供了一些面向服務支援。例如:實現檔案上傳的multipart請求,它也提供了Spring和其它Web框架的整合,比如Struts、WebWork。

3.7 Spring的MVC框架模組

Spring為構建Web應用提供了一個功能全面的MVC框架。雖然Spring可以很容易地與其它MVC框架整合,例如Struts,但Spring的MVC框架使用IoC對控制邏輯和業務物件提供了完全的分離。

它也允許你宣告性地將請求引數繫結到你的業務物件中,此外,Spring的MVC框架還可以利用Spring的任何其它服務,例如國際化資訊與驗證。

四 .入門案例

4.1 匯入依賴

    <dependencies>
<!--        Spring的核心依賴-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.10</version>
        </dependency><!--        用於測試的依賴-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
        </dependency>
    </dependencies>

4.2 在Java的service建立介面和它的實現類

UserService的介面

package com.qf.service;
​
public interface UserService {
    public void addUser();
​
    public void deleteUser();
​
}

UserService的實現類

package com.qf.service.impl;
​
import com.qf.service.UserService;
​
public class UserServiceImpl implements UserService {
​
    @Override
    public void addUser() {
        System.out.println("addUser....");
    }
​
    @Override
    public void deleteUser() {
        System.out.println("deleteUser....");
    }
}

4.3 建立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">
<!-- <bean></bean>標籤:建立bean物件 -->
        <!-- 無參構造建立物件 -->
        <bean id="userService" class="com.qf.service.impl.UserServiceImpl"></bean>

4.4 建立測試類

public class SpringTest {
​
    @Test
    public void test() {
        //載入配置檔案,建立applicationContext物件
        ApplicationContext applicationContext =
                new ClassPathXmlApplicationContext("applicationContext.xml");
​
        //獲取Bean物件(即userService)
        UserService userService = (UserService)applicationContext.getBean("userService");
​
        //呼叫方法
        userService.addUser();
        userService.deleteUser();
    }

4.5 測試結果

addUser....
deleteUser....
​
Process finished with exit code 0

 

 

相關文章