摘要:像一樣利用注解自定義切片在中,利用注解可以很輕松的利用技術(shù)進(jìn)行事物管理。表明該注解在運(yùn)行時(shí)也是有效的。其中用來聲明切片的實(shí)現(xiàn)。在這個(gè)代碼里面,最關(guān)鍵的一步是這個(gè)聲明與普通的注解式聲明切片類似,只是其中表明該切片作用范圍為聲明的注解作用范圍。
像@Transactional一樣利用注解自定義aop切片
在spring中,利用@Transactional注解可以很輕松的利用aop技術(shù)進(jìn)行事物管理。在實(shí)際項(xiàng)目中,直接利用自定義注解實(shí)現(xiàn)切片可以大大的提高我們的編碼效率以及代碼的簡潔性。
實(shí)現(xiàn)以上的目標(biāo),主要涉及兩方面工作。
自定義注解
將注解聲明為切片
自定義注解介紹注解自定義的文章比較多,這里簡要介紹一下以下面的代碼為例。該代碼要實(shí)現(xiàn)一個(gè)分布式鎖的代碼。首先利用@interface來聲明該類為接口類,用@Target來聲明該注解的作用范圍。該例子中ElementType.METHOD, ElementType.TYPE表明該注解作用范圍是方法和類。@Retention注明該注解的作用周期。RetentionPolicy.RUNTIME表明該注解在運(yùn)行時(shí)也是有效的。
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 } }將注解聲明為切片
下面的代碼是實(shí)現(xiàn)注解切片邏輯的代碼。其中@Aspect用來聲明切片的實(shí)現(xiàn)。在這個(gè)代碼里面,最關(guān)鍵的一步是
@Around(value = "@annotation(com.whaty.lock.annotation.Lock)")
這個(gè)聲明與普通的注解式聲明切片類似,只是其中@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(); // 釋放鎖 } }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/64987.html
摘要:編程式事務(wù)指的是通過編碼方式實(shí)現(xiàn)事務(wù)聲明式事務(wù)基于將具體業(yè)務(wù)邏輯與事務(wù)處理解耦。聲明式事務(wù)管理使業(yè)務(wù)代碼邏輯不受污染因此在實(shí)際使用中聲明式事務(wù)用的比較多。聲明式事務(wù)有兩種方式,一種是在配置文件中做相關(guān)的事務(wù)規(guī)則聲明,另一種是基于注解的方式。 事務(wù)管理是應(yīng)用系統(tǒng)開發(fā)中必不可少的一部分。Spring 為事務(wù)管理提供了豐富的功能支持。Spring 事務(wù)管理分為編碼式和聲明式的兩種方式。編程式...
摘要:由于的限制,無法替換被代理類已經(jīng)被載入的字節(jié)碼,只能生成并載入一個(gè)新的子類作為代理類,被代理類的字節(jié)碼依然存在于中。區(qū)別于前兩者,是一種靜態(tài)代理的實(shí)現(xiàn),即在編譯時(shí)或者載入類時(shí)直接修改被代理類文件的字節(jié)碼,而非運(yùn)行時(shí)實(shí)時(shí)生成代理。 現(xiàn)象描述 上周同事發(fā)現(xiàn)其基于mySql實(shí)現(xiàn)的分布式鎖的線上代碼存在問題,代碼簡化如下: @Controller class XService { @A...
摘要:又是什么其實(shí)就是一種實(shí)現(xiàn)動(dòng)態(tài)代理的技術(shù),利用了開源包,先將代理對象類的文件加載進(jìn)來,之后通過修改其字節(jié)碼并且生成子類。 在實(shí)際研發(fā)中,Spring是我們經(jīng)常會(huì)使用的框架,畢竟它們太火了,也因此Spring相關(guān)的知識(shí)點(diǎn)也是面試必問點(diǎn),今天我們就大話Aop。特地在周末推文,因?yàn)樵撈恼麻喿x起來還是比較輕松詼諧的,當(dāng)然了,更主要的是周末的我也在充電學(xué)習(xí),希望有追求的朋友們也盡量不要放過周末時(shí)...
摘要:起因考慮如下一個(gè)例子定義在這個(gè)例子中我們定義了一個(gè)注解這個(gè)是一個(gè)方法注解我們的期望是當(dāng)有此注解的方法被調(diào)用時(shí)需要執(zhí)行指定的切面邏輯即執(zhí)行方法在類中方法被所注解因此調(diào)用方法時(shí)應(yīng)該會(huì)觸發(fā)方法的調(diào)用不過有一點(diǎn)我 起因 考慮如下一個(gè)例子: @Target(value = {ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Doc...
摘要:入門篇學(xué)習(xí)總結(jié)時(shí)間年月日星期三說明本文部分內(nèi)容均來自慕課網(wǎng)。主要的功能是日志記錄,性能統(tǒng)計(jì),安全控制,事務(wù)處理,異常處理等等。 《Spring入門篇》學(xué)習(xí)總結(jié) 時(shí)間:2017年1月18日星期三說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)示例源碼:https://github.com/zccodere/s...個(gè)人學(xué)習(xí)源碼:https://git...
閱讀 2008·2019-08-29 16:27
閱讀 1378·2019-08-29 16:14
閱讀 3380·2019-08-29 14:18
閱讀 3461·2019-08-29 13:56
閱讀 1260·2019-08-29 11:13
閱讀 2128·2019-08-28 18:19
閱讀 3447·2019-08-27 10:57
閱讀 2283·2019-08-26 11:39