天天看點

Spring基礎入門(一)之 理論&基礎概念前言Spring 體系結構IOC&DIIOC相關之beanDI相關之注入注解開發AOPAOP事務管理

文章目錄

  • 前言
  • Spring 體系結構
  • IOC&DI
    • 1.Ioc控制反轉
    • 2.DI依賴注入
    • 3.目标
  • IOC相關之bean
    • 1.bean的基礎配置
    • 2.bean的執行個體化
    • 3.bean的生命周期
    • 4.IOC管理第三方bean
  • DI相關之注入
  • 注解開發
    • 1.介紹
    • 2.注解之bean&DI
    • 3.注解管理第三方bean
    • 4.常見注解的含義
  • AOP
    • 1.介紹
    • 2.核心概念
    • 3.常見注解
  • AOP事務管理
    • 1.Spring事務
    • 2.事務角色
    • 3.事務屬性

前言

這篇文章主要是介紹Spring主要的一些理論&基本概念(盡量不貼代碼)

具體實戰操作可以見 Spring(二)實戰

常見面試題可以見Spring(三)面試(其實搞懂這篇文章,三的面試題就不難了,當然也可以用來查漏補缺)

Spring 體系結構

開局一張圖

Spring基礎入門(一)之 理論&基礎概念前言Spring 體系結構IOC&DIIOC相關之beanDI相關之注入注解開發AOPAOP事務管理

IOC&DI

Spring最重要的兩大概念之一 —— IOC / DI

1.Ioc控制反轉

(1)為什麼引入Ioc?

之前Web開發中代碼耦合度過高。

業務層需要調用資料層的方法,就需要在業務層new資料層的對象。如果資料層的實作類發生變化,那麼業務層的代碼也需要跟着改變,發生變更後,都需要進行編譯打包和重部署。如下圖:

Spring基礎入門(一)之 理論&基礎概念前言Spring 體系結構IOC&DIIOC相關之beanDI相關之注入注解開發AOPAOP事務管理

(2)是以提出解決方案——控制反轉:

IOC:使用對象時,由主動new産生對象轉換為由外部提供對象;此過程中對象建立控制權由程式轉移到外部——此思想稱為控制反轉。

(3)怎麼實作IoC?

  • Spring提供了一個容器,稱為IOC容器,用來充當IOC思想中的"外部"
  • IOC容器負責對象的建立、初始化等一系列工作,其中包含了資料層和業務層的類對象
  • 被建立或被管理的對象在IOC容器中統稱為Bean或Bean對象

2.DI依賴注入

(1)為什麼要依賴注入?

當IOC容器中建立好service和dao對象後,程式能正确執行麼?——不行,因為service運作需要依賴dao對象(是以需要綁定兩者)

(2)解決方案——依賴注入

DI:在容器中建立bean與bean之間的依賴關系的整個過程

Spring基礎入門(一)之 理論&基礎概念前言Spring 體系結構IOC&DIIOC相關之beanDI相關之注入注解開發AOPAOP事務管理

3.目标

  • 使用IOC容器管理bean(IOC)
  • 在IOC容器内将有依賴關系的bean進行關系綁定(DI)
  • 最終結果為:使用對象時不僅可以直接從IOC容器中擷取,并且擷取到的bean已經綁定了所有的依賴關系.

IOC相關之bean

(後面都會用注解開發代替,這裡還是采用标簽)

1.bean的基礎配置

通過bean标簽的屬性來進行基礎配置

Spring基礎入門(一)之 理論&基礎概念前言Spring 體系結構IOC&DIIOC相關之beanDI相關之注入注解開發AOPAOP事務管理

為什麼bean預設為單例(singleton)?

  • bean為單例的意思是在Spring的IOC容器中隻會有該類的一個對象
  • bean對象隻有一個就避免了對象的頻繁建立與銷毀,達到了bean對象的複用,性能高

2.bean的執行個體化

對象已經能交給Spring的IOC容器來建立了,但容器如何來建立對象的呢?——bean的執行個體化過程

常見三種方法,主要是構造方法和factorybean

方法 描述
構造方法執行個體化
靜态工廠執行個體化
執行個體工廠執行個體化

3.bean的生命周期

bean對象從建立到銷毀的整體過程。

最後以一張圖總結bean相關:

Spring基礎入門(一)之 理論&基礎概念前言Spring 體系結構IOC&DIIOC相關之beanDI相關之注入注解開發AOPAOP事務管理

4.IOC管理第三方bean

之前的類都是我們自己建立的,是以可以友善的交給IOC去管理,但是如果要用到第三方類/jar包,該怎麼配置管理?

(标簽配置類的方法略過,直接用下面的注解管理!)

DI相關之注入

(簡單介紹下,後面有注解開發)

(1)setter注入

對于引用資料類型使用的是

<property name="" ref=""/>

對于簡單資料類型使用的是

<property name="" value=""/>

(2)構造器注入

(3)自動裝配

IoC容器根據bean所依賴的資源在容器中自動查找并注入到bean中的過程稱為自動裝配——添加autowire屬性

依賴注入相關:

Spring基礎入門(一)之 理論&amp;基礎概念前言Spring 體系結構IOC&amp;DIIOC相關之beanDI相關之注入注解開發AOPAOP事務管理

注解開發

1.介紹

為什麼要用注解開發?——簡化配置開發(之前IOC和DI的實作都需要寫在applicationContext.xml配置檔案的bean标簽中)

怎麼實作注解開發?——删除原來的bean标簽,直接在類上方添加

@Component

注解(注解在哪個類上方這個類就是bean)。如:

@Component("bookDao")
public class BookDaoImpl implements BookDao {
    public void save() {
        System.out.println("book dao save ..." );
    }
}
           

與配置檔案的對應關系是:

Spring基礎入門(一)之 理論&amp;基礎概念前言Spring 體系結構IOC&amp;DIIOC相關之beanDI相關之注入注解開發AOPAOP事務管理

純注解開發模式:使用Java類替代配置檔案,即在配置類上添加

@Configuration

注解,将其辨別為一個配置類,替換

applicationContext.xml

。然後在配置類上添加包掃描注解

@Configuration
@ComponentScan("com.itheima")
public class SpringConfig {
}
           

2.注解之bean&DI

将前面bean和DI通過配置實作的内容都換成對應的注解實作!

(1)bean

@Scope("prototype")

——@Scope設定bean的作用範圍(将某個類變成非單例)

@PostConstruct

——在構造方法之後執行,替換 init-method

@PreDestroy

——在銷毀方法之前執行,替換 destroy-method

Spring基礎入門(一)之 理論&amp;基礎概念前言Spring 體系結構IOC&amp;DIIOC相關之beanDI相關之注入注解開發AOPAOP事務管理

(2)DI依賴注入

@Autowired

注解:寫在屬性上并将setter方法删除掉,自動裝配

@Qualifier

注解:指定注入哪個名稱的bean對象,不能獨立使用,和

@Autowired

一起使用

@Value

——從properties配置檔案中讀取内容進行使用

3.注解管理第三方bean

@bean

——将方法的傳回值制作為Spring管理的一個bean對象

@Import

——手動引入需要加載的配置類

4.常見注解的含義

名稱 類型 位置 作用
@Component 類注解 類定義上方 設定該類為Spring管理的Bean
@Configuration 類注解 類定義上方 設定該類為Spring配置類
@ComponentScan 類注解 類定義上方 設定spring配置類掃描路徑,用于加載使用注解格式定義的bean
@Scope 類注解 類定義上方

設定該類建立對象的作用範圍

可用于設定建立出的bean是否為單例對象

@Autowired 屬性注解 或 方法注解 屬性定義上方 或 标準set方法上方 或 類set方法上方 為引用類型屬性設定值
@Qualifier 屬性注解 或 方法注解 屬性定義上方 或 标準set方法上方 為引用類型屬性指定注入的beanId
@Value 屬性注解 或 方法注解 屬性定義上方 或 标準set方法上方 為 基本資料類型 或 字元串類型 屬性設定值
@Bean 方法注解 方法定義上方 設定該方法的傳回值作為spring管理的bean
@Import 類注解 類定義上方 導入配置類

XML配置與注解對照圖:

Spring基礎入門(一)之 理論&amp;基礎概念前言Spring 體系結構IOC&amp;DIIOC相關之beanDI相關之注入注解開發AOPAOP事務管理

AOP

Spring最重要的兩大概念之二 —— AOP

1.介紹

AOP(Aspect Oriented Programming):面向切面程式設計,一種程式設計範式,指導開發者如何組織程式結構。

作用:在不改動原始設計的基礎上為其進行功能增強

2.核心概念

(1)連接配接點((JoinPoint)

程式執行過程中的任意位置,粒度為執行方法、抛出異常、設定變量等,在SpringAOP中,了解為方法的執行

(2)切入點(Pointcut)

比對連接配接點的式子(需要增強的方法)

在SpringAOP中,一個切入點可以描述一個具體方法,也可比對多個方法

(3) 通知(Advice)

在切入點處執行的操作,也就是共性功能(最終以存放共性功能的方法呈現)

(4)通知類

定義通知的類,通知一般是方法,是以需要寫在類中,這個類就是通知類

(5)切面(Aspect)

描述通知與切入點的對應關系

具體可以看下圖:

Spring基礎入門(一)之 理論&amp;基礎概念前言Spring 體系結構IOC&amp;DIIOC相關之beanDI相關之注入注解開發AOPAOP事務管理

3.常見注解

名稱 類型 位置 作用
@EnableAspectJAutoProxy 配置類注解 配置類定義上方 開啟注解格式AOP功能
@Aspect 類注解 切面類定義上方 設定目前類為AOP切面類
@Pointcut 方法注解 切入點方法定義上方 設定切入點方法
@Before 方法注解 通知方法定義上方 設定目前通知方法與切入點之間的綁定關系,目前通知方法在原始切入點方法前運作

AOP事務管理

1.Spring事務

事務其實是在Mysql資料庫中最先接觸,事務的作用是:在資料層保障一系列的資料庫操作同成功同失敗

Spring事務作用:在資料層或業務層保障一系列的資料庫操作同成功同失敗

為什麼業務層也需要事務?

  • 轉賬業務會有兩次資料層的調用,一次是加錢一次是減錢
  • 把事務放在資料層,加錢和減錢就有兩個事務
  • 沒辦法保證加錢和減錢同時成功或者同時失敗
  • 這個時候就需要将事務放在業務層進行處理

相關注解

名稱 類型 位置 作用
@EnableTransactionManagement 配置類注解 配置類定義上方 設定目前Spring環境中開啟注解式事務支援
@Transactional 接口注解,類注解,方法注解 業務層接口上方,業務層實作類上方,業務方法上方 為目前業務層方法添加事務(如果設定在類或接口上方則類或接口中所有方法均添加事務)

2.事務角色

事務管理者:發起事務方,在Spring中通常指代業務層開啟事務的方法

事務協調員:加入事務方,在Spring中通常指代資料層方法,也可以是業務層方法

3.事務屬性