Spring-Aop詳細教程
Aop定義:
aop:
1、切面
事務、日誌、安全性框架、許可權等都是切面
2、通知
切面中的方法就是通知
3、目標類
4、切入點
只有符合切入點,才能讓通知和目標方法結合在一起
5、織入:
形成代理物件的方法的過程
好處:
事務、日誌、安全性框架、許可權、目標方法之間完全是鬆耦合的
execution詳解:
execution(public * *(..)) 所有的公共方法
execution(*set*(..)) 以set開頭的任意方法
execution(*com.xyz.service.AccountService.*(..))com.xyz.service.AccountService類中的所有的方法
execution(*com.xyz.service.*.*(..)) com.xyz.service包中的所有的類的所有的方法
execution(*com.xyz.service..*.*(..))com.xyz.service包及子包中所有的類的所有的方法
execution(*cn.itcast.spring.sh..*.*(String,?,Integer)) cn.itcast.spring.sh包及子包中所有的類的有三個引數
第一個引數為String,第二個引數為任意型別,
第三個引數為Integer型別的方法
載入過程:
springAOP的具體載入步驟:
1、當spring容器啟動的時候,載入了spring的配置檔案
2、為配置檔案中所有的bean建立物件
3、spring容器會解析aop:config的配置
1、解析切入點表示式,用切入點表示式和納入spring容器中的bean做匹配
如果匹配成功,則會為該bean建立代理物件,代理物件的方法=目標方法+通知
如果匹配不成功,不會建立代理物件
4、在客戶端利用context.getBean獲取物件時,如果該物件有代理物件則返回代理物件,如果代理物件,則返回目標物件
說明:如果目標類沒有實現介面,則spring容器會採用cglib的方式產生代理物件,如果實現了介面,會採用jdk的方式
通知:
通知:
1、前置通知
1、在目標方法執行之前執行
2、無論目標方法是否丟擲異常,都執行,因為在執行前置通知的時候,目標方法還沒有執行,還沒有遇到異常
2、後置通知
1、在目標方法執行之後執行
2、當目標方法遇到異常,後置通知將不再執行
3、後置通知可以接受目標方法的返回值,但是必須注意:
後置通知的引數的名稱和配置檔案中returning="var"的值是一致的
3、最終通知:
1、在目標方法執行之後執行
2、無論目標方法是否丟擲異常,都執行,因為相當於finally
4、異常通知
1、接受目標方法丟擲的異常資訊
2、步驟
在異常通知方法中有一個引數Throwable ex
在配置檔案中
<aop:after-throwingmethod="throwingMethod" pointcut-ref="perform"throwing="ex"/>
5、環繞通知
1、如果不在環繞通知中呼叫ProceedingJoinPoint的proceed,目標方法不會執行
2、環繞通知可以控制目標方法的執行
聯合hibernate+spring的案例:
hibernate工具類:
對映檔案:Person.hbm.xml
dao層介面:
dao實現層
事務層
spring配置檔案(applicationContext.xml):
測試類:
相關文章
- Vuex詳細教程Vue
- Vagrant詳細教程
- Nginx 詳細教程Nginx
- Emacs詳細教程Mac
- Vue Router詳細教程Vue
- 收藏|Numpy詳細教程
- SourceTree詳細使用教程
- Git使用詳細教程Git
- 轉 Git使用詳細教程Git
- Apollo 配置中心詳細教程
- yarn詳細入門教程Yarn
- 介面文件生成詳細教程
- IIS部署WCF詳細教程
- gulp入門詳細教程
- FckEditor(CKEditor)配置詳細教程
- Redis安裝教程(超詳細)Redis
- windows安裝mongodb詳細教程WindowsMongoDB
- 超詳細kafka教程來啦Kafka
- Kafka詳細教程加面試題Kafka面試題
- 抖音文案號操作詳細教程
- Linux grep命令詳細教程Linux
- Jmeter安裝配置詳細教程JMeter
- RHEL 6.3 詳細安裝教程
- Argo CD 詳細入門教程Go
- Linux文字處理詳細教程Linux
- 超詳細!Vuex手把手教程Vue
- SSM三大框架整合詳細教程SSM框架
- Centos下Elasticsearch安裝詳細教程CentOSElasticsearch
- rabbitmq簡易安裝詳細教程MQ
- Fiddler 抓包詳細使用教程
- 【轉】Python之Numpy詳細教程Python
- dnsmasq劫持和dns教程詳細解析DNS
- sublime安裝外掛詳細教程
- WEB PC 管理端打包詳細教程Web
- Hadoop叢集安裝詳細教程Hadoop
- 詳細Fildder抓包Android教程Android
- SVG基礎教程(超級詳細)SVG
- Apple Pay接入詳細教程(轉)APP