一站式輕量級框架 Spring

Spring 簡介

Spring 是一個輕量級的 Java 開發框架,它是爲了解決企業應用開發的複雜性而建立的。Spring 的核心是控制反轉(IoC)和麪向切面編程(AOP)。簡單來講,Spring 是一個分層的 Java EE 一站式輕量級開源框架。java

Spring 的主要做用就是爲代碼 解耦,下降代碼間的耦合度。spring

在一個系統中,根據功能的不一樣,代碼分爲 主業務邏輯系統級業務邏輯 兩類。它們各自具備鮮明的特色:主業務代碼間邏輯聯繫緊密,有具體的專業業務應用場景,複用性相對較低;系統級業務相對功能獨立,沒有具體的專業業務應用場景,主要是爲主業務提供系統級服務,如日誌、安全、事務等,複用性強。編程

Spring 根據代碼的功能特色,將下降耦合度的方式分爲了如下兩類。安全

  • IoC:使得主業務在相互調用過程當中,不用再本身維護關係了,即不用再本身建立要使用的對象了,而是由 Spring 容器統一管理,實現自動 注入
  • AOP:使得系統級服務獲得了最大複用,且不用再手工將系統級服務混雜到主業務邏輯中了,而是由 Spring 容器統一完成 織入

Spring 體系結構

Spring 由 20 多個模塊組成,它們能夠分爲數據訪問/集成(Data Access/Integration)、Web、面向切面編程(AOP, Aspects)、應用服務器設備管理(Instrumentation)、消息發送(Messaging)、核心容器(Core Container)和測試(Test)。服務器

file

Spring 的特色

非侵入式

所謂非侵入式是指,Spring 框架的 API 不會在業務邏輯上出現,即業務邏輯是 POJO。因爲業務邏輯中沒有 Spring 的 API,因此業務邏輯能夠從 Spring 框架快速的移植到其餘框架, 即與環境無關。app

容器

Spring 做爲一個容器,能夠管理對象的生命週期、對象與對象之間的依賴關係。能夠經過配置文件,來定義對象,以及設置與其餘對象的依賴關係。框架

控制反轉(IoC)

控制反轉(Inversion of Control),即建立被調用者的實例不是由調用者完成,而是由 Spring 容器完成,並注入調用者。一個對象依賴的其它對象會經過被動的方式傳遞進來,而不是這個對象本身建立或者查找依賴對象。即,不是對象從容器中查找依賴,而是容器在對象初始化時不等對象請求就主動將依賴傳遞給它。測試

面向切面編程(AOP)

面向切面編程(Aspect Orient Programming),是一種編程思想,是面向對象編程 OOP 的補充。容許經過分離應用的業務邏輯與系統級服務(例如日誌和事務管理)進行開發。開發者只要專一實現業務邏輯,並不須要負責其它的系統級關注點,例如日誌或事務支持。編碼

Spring 核心 IoC

控制反轉的核心功能在於經過將程序代碼獲取對象調用權,來實現對象的裝配和管理。控制反轉就是對對象控制權的轉移,從程序代碼自己反轉到了外部容器。spa

當前比較流行的實現方式有兩種: 依賴注入和依賴查找,依賴注入方式應用更爲普遍。

  • 依賴查找(DL):Dependency Lookup,容器提供回調接口和上下文環境給組件,程序代碼則須要提供具體的查找方式。
  • 依賴注入(DI):Dependency Injection,指程序運行過程當中,若須要調用另外一個對象協助時,無須在代碼中建立被調用者,而是依賴於外部容器,由外部容器建立後傳遞給程序。

依賴注入是目前最優秀的解耦方式。依賴注入讓 Spring 的 Bean 之間以配置文件的方式組織在一塊兒,而不是以硬編碼的方式耦合在一塊兒的。

第一個 Spring 程序

引入依賴

pom.xml 中引入 Spring 核心依賴 org.springframework:spring-context

<dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.2.15.RELEASE</version>
</dependency>

業務代碼

建立 HiSpringService 業務接口

public interface HelloSpringService {
    public void helloSpring();
}

建立實現類

public class HelloSpringService implements HelloSpringServiceImpl {
    public void helloSpring() {
        System.out.println("Hello Spring");
    }
}

相關配置

src/main/resources 目錄下建立 spring-context.xml 配置文件,從如今開始類的實例化工做交給 Spring 容器管理(IoC),配置文件以下:

<?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="helloSpringService" class="com.antoniopeng.hello.spring.service.impl.HelloSpringServiceImpl" />
</beans>
  • bean:用於定義一個實例對象。一個實例對應一個 bean 元素。
  • id:該屬性是 Bean 實例的惟一標識,程序經過 id 屬性訪問Bean,Bean 與 Bean 間的依賴關係也是經過 id 屬性關聯的。
  • class:指定該 Bean 所屬的類,注意這裏只能是類,不能是接口。

使用 Spring IoC

建立一個 IoCTest 測試類,測試對象是否可以經過 Spring 來建立,代碼以下:

public class IoCTest {

    public static void main(String[] args) {
        // 獲取 Spring 容器
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-context.xml");
        
        // 從 Spring 容器中獲取對象
        HelloSpringService helloSpringService = (HelloSpringService) applicationContext.getBean("HelloSpringService");
        HelloSpringService.helloSpring();
    }
}
相關文章
相關標籤/搜索