spring 兩大特性IOC(bean交給容器管理), AOP(面向切面編程,是一種編程思想)
AOP (Aspect Orient Programming),直譯過來就是 面向切面編程。AOP 是一種編程思想,是面向對象編程(OOP)的一種補充。面向對象編程將程序抽象成各個層次的對象,而面向切面編程是將程序抽象成各個切面。
1,靜態代理
根據需要,為每個類實現代理,不夠靈活,
2,動態代理, 使用JDK實現
//ClassLoader被代理類類加載器//interfaces被代理類接口集合//InvocationHandler接口的實現類,主要是重寫invoke方法Proxy.newProxyInstance(ClassLoaderloader,Class<?>[]interfaces,InvocationHandlerh)
spring 默認使用的方式,比較靈活,在內存中生成了一個和代理類相同接口的類,所以實例化后,只能用接口接受,
缺點: 類必須實現了接口,代理類用接口接受,
3,動態代理,CGLIN實現,底層是字節碼
使用方式和JDK 一樣
不同點: 對于沒有接口的類,也可以代理,底層是用字節碼實現
Before:方法執行前執行
After:方法返回后或異常后執行,先于AfterThrowing,AfterReturning 執行
AfterThrowing: 方法異常后執行
AfterReturning 方法返回后執行
Around: 環繞方法
* com.study.common..*.*(..) 第一個* 表示范圍,返回類型(可省略), 類路徑,一個點表示當前路徑,兩個點表示子及子孫包,* 表示包含任意路徑, 最后一個* 匹配所有方法,(..) 方法的參數, .. 表示任意參數
使用@Aspect 標注的類,是切面,
@Pointcut 是切點,后面接切點表達式
execution:用于匹配連接點的執行方法,
within 只能到類,
args:限制切入點到參數,
this,target: 都只能切到類或者接口。對于切入的類,如果實現了接口, this前后環繞不生效,target 沒有影響
annotation: 根據注解切入
多個表達式,可以用&& ,||
原子性(Atomicity),強調的是一整件事的完整性, 這件事的過程必須全部完成(買東西,付款,發貨,收貨)
一致性(Consistency),強調一種狀態變為另一種狀態,并且全部完成(取錢后 -> 銀行,個人錢的總數較之前不變)
隔離性(Isolation),當前事物不受別的事物影響
持久性(Durability),已提交的事物,永久生效
臟讀:一個事物,讀取了另一個事物未提交的數據
不可重復讀(行級鎖):一個事物讀取另一個事物修改的數據
幻讀(表級鎖):一個事物讀取另一個事物inset,delete 數據
讀未提交(READ_UNCOMMITTED),讀已提交(READ_COMMITTED),可重復讀(REPEATABLE_READ),串行化:(SERIALIZABLE)
MySQL 默認可重復讀,行鎖
oracle 默認serializable, 表鎖
publicclassLogTest{@Transactionalpublicvoidbuy(){sub();add();log();saveLog();}@Transactional(propagation=Propagation.REQUIRES_NEW)publicvoidlog(){//父方法沒有事物,當前方法開啟一個新事物//父方法開啟事物,將父方法事物掛起,這里新開一個事物,執行完再執行父事物System.out.println("不管父方法是否扣款,都會記錄日志到數據庫");}@Transactional(propagation=Propagation.REQUIRED)publicvoidsub(){//如果父方法buy也開啟了事物,則加入父事物System.out.println("扣款方法");}@Transactional(propagation=Propagation.REQUIRED)publicvoidadd(){//如果父方法buy也開啟了事物,則加入父事物System.out.println("存款方法");}@Transactional(propagation=Propagation.SUPPORTS)publicvoidsaveLog(){//saveLog方法不單獨開啟事物,如果有父事物就加入會一起回滾System.out.println("只是記錄日志");}}
到此,關于“Spring AOP的原理和使用方法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注本站網站,小編會繼續努力為大家帶來更多實用的文章!
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
什么是殘值率?殘值率的含義就是環繞的資產的一種比值,根據固定的資產的收入與支出,做一個總結。那么殘值率怎么算的呢?固定資產凈殘值=固定資產報廢時預計可以收回的殘余價值–預計清理費用后的余額;預計凈殘值率=固定資產凈殘值/固定資產原值*100%。固定資產的殘值率一般是多少外資企業固定資產殘值率一般為10%。資產按照直線法計算的折舊,準予扣除。企業應當根據固定資產的性質和使用情況,合理確定...
中國工商銀行怎么查余額?在工行進行余額查詢的方法有哪些?一起隨小編簡單了解下吧!作為宇宙第一大行,中國工商銀行的客戶有很多,如果你辦理中國工商銀行卡想要查余額,可以通過以下幾種途徑:1、網銀查詢登陸個人工商銀行網銀,通過我的賬戶-余額查詢-余額,便可查詢到銀行卡內的余額。2、微信公眾號查詢關注微信公眾號“中國工商銀行電子銀行”,在我的-余額中可查詢,需要提前綁卡。3、中國工...
據百科資料顯示,紐諾教育是廣州紐諾教育科技有限公司旗下的教育品牌。廣州紐諾教育科技有限公司于2016年01月11日成立。法定代表人王榮輝。紐諾教育是嬰幼兒服務及教育機構,總部在廣州 ,是一家致力于為0-6歲寶寶家庭提供線上線下一站式嬰幼兒托育服務的教育品牌。紐諾教育擁有紐諾·艾瑪國際保育園、育兒在線課程、嬰幼兒睡眠顧問職業培訓以及嬰幼兒養育上門服務四大核心業務。品牌的創立起源于創始人...