SSM框架學習之Spring的AOP學習以及資料整理
什麼是AOP?
- 概念
AOP:Aspect Oriented Programing即面向切面程式設計
簡單來說:它就是把我們程式中重複性的程式碼抽取出來,在需要執行的時候,使用動態代理技術,在不修改原始碼的情況下,對我們的方法進行增強。
AOP的作用和優勢
- 作用
在程式執行期間,不修改原始碼對方法進行增強 - 優勢
減少重複程式碼
提高開發效率
方便維護
此處存在的問題:
事務被自動控制了,我們使用了connection物件的setAutoCommit(true)
此方式控制事務,只能控制一條,如果業務方法一次性要執行多條sql語句,這種方法就無法實現功能了。如下圖:
當我們執行時,由於執行有異常,轉賬失敗。但是因為我們是每次執行持久層方法都是獨立事務,導致無法實現事務控制(不符合事務的一致性)。
解決辦法:
讓業務層來控制事務的提交和回滾。
事務控制
開始事務:beginTransaction( )
提交事務:commit( )
回滾事務:rollback( )
釋放連線:release( )
通知
前置通知、後置通知、異常通知、最終通知、環繞通知
動態代理
- 特點:
位元組碼隨用隨建立,隨用隨載入。
它與靜態代理的區別,靜態代理是位元組碼一上來就建立好了,並完成載入。
裝飾者模式就是靜態代理的一種方式。 - 動態代理常用的兩種方式:
1、基於介面的動態代理
提供者:JDK 官方的 Proxy 類。
要求:被代理類最少實現一個介面。
2、基於子類的動態代理
提供者:第三方的 CGLib,如果報 asmxxxx 異常,需要匯入 asm.jar。
要求:被代理類不能用 final 修飾的類(最終類)。
spring中基於xml的aop配置
1、把通知Bean也交給spring來處理
2、使用aop:config標籤表明開始aop的配置
3、使用aop:aspect標籤表明配置切面
id屬性:是給切面提供一個唯一標識
ref屬性:是指定通知類bean的id
4、在aop:aspect標籤的內部使用對應的標籤配置通知的型別
aop:before:表示配置前置通知
method:用於指定Logger類中哪個方法是前置通知
pointcut:用於指定切入點表示式,該表示式的含義是對業務層中哪些方法進行增強
完整的寫法:execution(void com.gk.service.impl.AccountServiceImpl.saveAccount())
縮寫部分:execution(* com.gk.service.impl.*.*())
全通配寫法:
* *..*.*(..)
實際開發中切入點表示式的通常寫法:
* com.gk.service.impl.*.*(..)
5、aop:point-ref id用於指定切入點表示式的唯一標識,expression屬性用於指定表示式內容
aop:pointcut expression="* com.gk.service.impl.*.*(..))" id="pt1"/>
也可以寫在aop:aspect外面(必須是在aop:aspect標籤之前),即所有切面可用。
6、aop:around 用於配置環繞通知
method:指定通知中方法的名稱。
pointct:定義切入點表示式
pointcut-ref:指定切入點表示式的引用
spring 框架為我們提供了一個介面:ProceedingJoinPoint,它可以作為環繞通知的方法引數。
其中有一個proceed()方法明確呼叫業務層方法(切入點方法)
基於註解的AOP配置
約束aop和context
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
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
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
在配置檔案中指定spring要掃描的包:
< !-- 告知 spring,在建立容器時要掃描的包 --> < context:component-scan base-package=“com.itheima”>< /context:component-scan >
在通知類上使用@ Aspect註解宣告為切面
以及一個@Around註解
@PointCut註解一定要注意下面通知呼叫的時候要使用pt1()加上括號,不然呼叫不成功;
完全不使用xml配置
@Configuration
@ComponentScan(basePackages="com.gk")
@EnableAspectJAutoProxy
public class SpringConfiguration {
}
相關文章
- 深入學習Spring框架(三)- AOP面向切面Spring框架
- 一起學習SSM框架之SpringMVC(五)SSM框架SpringMVC
- Spring框架學習筆記(一):官方文件介紹,IoC與AOP概念學習Spring框架筆記
- Spring AOP學習筆記01:AOP概述Spring筆記
- Go 學習資料整理Go
- SpringBoot學習之整合AOPSpring Boot
- Spring5.0原始碼學習系列之Spring AOP簡述Spring原始碼
- Spring AOP學習筆記05:AOP失效的罪因Spring筆記
- Spring AOP學習筆記02:如何開啟AOPSpring筆記
- Spring-boot整合AOP及AOP相關學習Springboot
- Spring AOP學習筆記03:AOP的核心實現之獲取增強器Spring筆記
- 學習是ssm框架的一點點感悟與思考SSM框架
- Python資料學習整理,小白們的福音Python
- Swift web服務框架Vapor 學習資源整理SwiftWeb框架Vapor
- SSM-框架搭建-tank後臺學習系統SSM框架
- SSM框架學習筆記_第1章_SpringIOC概述SSM框架筆記Spring
- 慕課網《探秘Spring AOP》學習總結Spring
- Spring框架學習筆記(1)Spring框架筆記
- spring框架學習 依賴注入Spring框架依賴注入
- 前端學習整理資料(未完待續)前端
- SLAM學習資料整理 殿堂級大牛SLAM
- Spring系列學習之Spring Cloud Data Flow 微服務資料流SpringCloud微服務
- Java初學者最佳的學習方法以及會遇到的坑(內含學習資料)!Java
- Python學習資源整理Python
- Spring Boot--日誌框架的學習Spring Boot框架
- Spring Boot 學習資料 (轉載)Spring Boot
- Spring學習01--初學者關於AOP和DI的理解Spring
- Android之Mina框架學習Android框架
- 深度學習之Tensorflow框架深度學習框架
- SSM之Spring框架--->>墨盒案例SSMSpring框架
- AOP學習筆記筆記
- 深度學習學習框架深度學習框架
- 學習bootstrap的整理。boot
- Spring學習筆記2(IOC註解方式&AOP)Spring筆記
- 深入學習Spring框架(一)- 入門Spring框架
- Spring學習之——手寫Spring原始碼V2.0(實現IOC、DI、MVC、AOP)Spring原始碼MVC
- 駁 《駁 《駁 《駁 《停止學習框架》》》》、《駁 《駁 《停止學習框架》》》、《駁 《停止學習框架》》、《停止學習框架》框架
- Beego框架學習--(核心:資料互動)Go框架