摘要:像一樣利用注解自定義切片在中,利用注解可以很輕松的利用技術進行事物管理。表明該注解在運行時也是有效的。其中用來聲明切片的實現。在這個代碼里面,最關鍵的一步是這個聲明與普通的注解式聲明切片類似,只是其中表明該切片作用范圍為聲明的注解作用范圍。
像@Transactional一樣利用注解自定義aop切片
在spring中,利用@Transactional注解可以很輕松的利用aop技術進行事物管理。在實際項目中,直接利用自定義注解實現切片可以大大的提高我們的編碼效率以及代碼的簡潔性。
實現以上的目標,主要涉及兩方面工作。
自定義注解
將注解聲明為切片
自定義注解介紹注解自定義的文章比較多,這里簡要介紹一下以下面的代碼為例。該代碼要實現一個分布式鎖的代碼。首先利用@interface來聲明該類為接口類,用@Target來聲明該注解的作用范圍。該例子中ElementType.METHOD, ElementType.TYPE表明該注解作用范圍是方法和類。@Retention注明該注解的作用周期。RetentionPolicy.RUNTIME表明該注解在運行時也是有效的。
package com.whaty.lock.annotation; import org.springframework.stereotype.Component; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Component @Target(value = {ElementType.METHOD, ElementType.TYPE}) @Retention(value = RetentionPolicy.RUNTIME) public @interface Lock { public LockImpl lockImpl() default LockImpl.MYSQL; public enum LockImpl { MYSQL, ZOOKEEPER } }將注解聲明為切片
下面的代碼是實現注解切片邏輯的代碼。其中@Aspect用來聲明切片的實現。在這個代碼里面,最關鍵的一步是
@Around(value = "@annotation(com.whaty.lock.annotation.Lock)")
這個聲明與普通的注解式聲明切片類似,只是其中@annotation表明該切片作用范圍為聲明的注解作用范圍。
package com.whaty.lock.aspect; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component; @Component @Aspect public class LockAspect { @Around(value = "@annotation(com.whaty.lock.annotation.Lock)") void execute(ProceedingJoinPoint proceedingJoinPoint) throws Throwable { // 嘗試獲取鎖 proceedingJoinPoint.proceed(); // 釋放鎖 } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64987.html
摘要:編程式事務指的是通過編碼方式實現事務聲明式事務基于將具體業務邏輯與事務處理解耦。聲明式事務管理使業務代碼邏輯不受污染因此在實際使用中聲明式事務用的比較多。聲明式事務有兩種方式,一種是在配置文件中做相關的事務規則聲明,另一種是基于注解的方式。 事務管理是應用系統開發中必不可少的一部分。Spring 為事務管理提供了豐富的功能支持。Spring 事務管理分為編碼式和聲明式的兩種方式。編程式...
摘要:由于的限制,無法替換被代理類已經被載入的字節碼,只能生成并載入一個新的子類作為代理類,被代理類的字節碼依然存在于中。區別于前兩者,是一種靜態代理的實現,即在編譯時或者載入類時直接修改被代理類文件的字節碼,而非運行時實時生成代理。 現象描述 上周同事發現其基于mySql實現的分布式鎖的線上代碼存在問題,代碼簡化如下: @Controller class XService { @A...
摘要:又是什么其實就是一種實現動態代理的技術,利用了開源包,先將代理對象類的文件加載進來,之后通過修改其字節碼并且生成子類。 在實際研發中,Spring是我們經常會使用的框架,畢竟它們太火了,也因此Spring相關的知識點也是面試必問點,今天我們就大話Aop。特地在周末推文,因為該篇文章閱讀起來還是比較輕松詼諧的,當然了,更主要的是周末的我也在充電學習,希望有追求的朋友們也盡量不要放過周末時...
摘要:起因考慮如下一個例子定義在這個例子中我們定義了一個注解這個是一個方法注解我們的期望是當有此注解的方法被調用時需要執行指定的切面邏輯即執行方法在類中方法被所注解因此調用方法時應該會觸發方法的調用不過有一點我 起因 考慮如下一個例子: @Target(value = {ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Doc...
摘要:入門篇學習總結時間年月日星期三說明本文部分內容均來自慕課網。主要的功能是日志記錄,性能統計,安全控制,事務處理,異常處理等等。 《Spring入門篇》學習總結 時間:2017年1月18日星期三說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學示例源碼:https://github.com/zccodere/s...個人學習源碼:https://git...
閱讀 2001·2019-08-29 16:27
閱讀 1370·2019-08-29 16:14
閱讀 3372·2019-08-29 14:18
閱讀 3455·2019-08-29 13:56
閱讀 1252·2019-08-29 11:13
閱讀 2118·2019-08-28 18:19
閱讀 3439·2019-08-27 10:57
閱讀 2273·2019-08-26 11:39