1. 程式人生 > >【Spring4(二)】IOC註解&AOP

【Spring4(二)】IOC註解&AOP

Spring 的IOC 的註解開發(*****)

Spring的IOC的註解開發的入門

建立web專案,引入jar包

  • 在Spring4的版本中,除了引入基本的開發包以外,還需要引入aop的包。
    在這裡插入圖片描述

引入Spring的配置檔案

  • 在src下建立一個ApplicationContext.xml
    • 引入約束:使用註解開發需要引入context約束。
    • 約束:spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html\xsd-configuration.html
      在這裡插入圖片描述

建立介面和實現類

開啟Spring的元件掃描

在這裡插入圖片描述

在類上添加註解

在這裡插入圖片描述

編寫測試類

在這裡插入圖片描述

註解方式設定屬性的值

  • 註解方式:使用註解方式,可以沒有set方法的。
    • 屬性如果有set方法,需要將屬性注入的註解新增到set方法
    • 屬性如果沒有set方法,需要將屬性注入的註解新增到屬性上。
      在這裡插入圖片描述

Spring IOC註解的詳解

@Component:元件

  • 修飾一個類,將這個類交給Spring管理。
  • 這個註解有三個衍生註解(功能類似)
    • @Controller:web層
    • @Service:service類
    • @Repository:dao層

屬性注入的註解

  • 普通屬性
    • @Value:設定普通屬性的值
  • 物件型別屬性
    • @Autowired:設定物件型別的屬性的值,但是按照型別完成屬性注入。
      • 我們習慣是按名稱完成屬性注入:必須讓@Autowired註解和@Qualifiter一起使用完成按照名稱屬性注入。
    • @Resource:完成物件型別的屬性的注入,按照名稱完成屬性的注入。

Bean 的其他的註解

  • 生命週期相關的註解(瞭解)
    • @PostConstruct:初始化方法
    • @PreDestroy:銷燬方法
  • Bean的作用範圍的註解
    • @Scope:作用範圍
      • singleton:預設單例
      • prototype:多例
      • request
      • session
      • globalsession

IOC 的 XML 和註解開發的比較

XML 和註解的比較

  • 適用場景
    • XML:可以適用任何場景
      • 結構清晰,維護方便。
    • 註解:有些地方用不了,這個類不是自己提供的。純註解(SSH)
      • 開發方便。

XML 和註解整合開發

  • XML 管理Bean,註解完成屬性注入。

Spring 的 AOP 的XML開發(*****)

AOP 的概述

在這裡插入圖片描述

AOP:面向切面程式設計。AOP是OOP的擴充套件和延伸,解決OOP開發遇到的問題。
在這裡插入圖片描述

Spring 底層的 AOP 實現原理

  • 動態代理
    • JDK動態代理:只能對實現了介面的類產生代理。
    • Cglib動態代理(類似於Javassist第三方代理技術):對沒有實現介面的類產生代理物件,生成子類物件。

Spring 的 AOP 底層實現(瞭解)

JDK 動態代理

在這裡插入圖片描述
在這裡插入圖片描述

Cglib 動態代理

  • Cglib:第三方開原始碼生成類庫,動態新增累的屬性和方法。
    在這裡插入圖片描述
    在這裡插入圖片描述
    在這裡插入圖片描述

Spring 的 AOP 的開發(AspectJ 的 XML 的方式)

Spring AOP 的簡介

  • AOP 思想最早是由AOP聯盟組織提出的,Spring使用這種思想最好的框架。
    • Spring 的AOP有自己實現的方式(非常繁瑣)。AspectJ是一個AOP的框架,Spring引入AspectJ作為自身AOP的開發。
    • Spring 有兩套AOP開發方式
      • Spring 傳統方式(棄用)。
      • Spring 基於AspectJ的AOP的開發(使用)。

AOP 開發中相關術語

在這裡插入圖片描述

Spring 的 AOP 的入門(AspectJ 的 XML 的方式)

建立 web 專案,引入 jar 包

  • 引入6個基本開發包
    在這裡插入圖片描述
  • 引入 aop 開發的相關 jar 包
    在這裡插入圖片描述

引入 Spring 的配置檔案

  • 引入 AOP 的約束
    在這裡插入圖片描述

編寫目標類並完成配置

在這裡插入圖片描述

編寫測試類

  • Spring 整合 Junit 單元測試
    在這裡插入圖片描述

編寫一個切面類

  • 編寫切面類
    在這裡插入圖片描述
  • 將切面類交給 Spring
    在這裡插入圖片描述

通過 AOP 的配置實現

在這裡插入圖片描述

Spring 中通知型別

前置通知:在目標方法執行之前進行操作

  • 前置通知:獲得切入點資訊
    在這裡插入圖片描述

後置通知:在目標方法執行之後進行操作

  • 後置通知:獲得切入點資訊、方法的返回值
    在這裡插入圖片描述

環繞通知:在目標方法執行之前和之後進行操作

  • 環繞通知可以組織目標方法的執行
    在這裡插入圖片描述

異常丟擲通知:在程式出現異常的到時候,進行的操作

在這裡插入圖片描述

最終通知:無論程式碼是否有異常,總會執行。

在這裡插入圖片描述

引介通知(不用會)

Spring 切入點表示式寫法

切入點表示式語法

  • 基於 execution 的函式完成的
  • 語法
    • [訪問修飾符] 方法返回值 包名.類名.方法名(引數)
    • public void com.itheima.spring.CustomerDao.save(…)
    • * *.*.*.*Dao.*.save(..)
      
    • * com.itheima.spring.CustomerDao+.save(..)
      
    • * com.itheima.spring..*.*(..)
      

在這裡插入圖片描述