【Spring4(二)】IOC註解&AOP
阿新 • • 發佈:2018-11-16
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:完成物件型別的屬性的注入,按照名稱完成屬性的注入。
- @Autowired:設定物件型別的屬性的值,但是按照型別完成屬性注入。
Bean 的其他的註解
- 生命週期相關的註解(瞭解)
- @PostConstruct:初始化方法
- @PreDestroy:銷燬方法
- Bean的作用範圍的註解
- @Scope:作用範圍
- singleton:預設單例
- prototype:多例
- request
- session
- globalsession
- @Scope:作用範圍
IOC 的 XML 和註解開發的比較
XML 和註解的比較
- 適用場景
- XML:可以適用任何場景
- 結構清晰,維護方便。
- 註解:有些地方用不了,這個類不是自己提供的。純註解(SSH)
- 開發方便。
- XML:可以適用任何場景
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..*.*(..)