個(gè)人做企業(yè) 網(wǎng)站百度極速版免費(fèi)下載安裝
在Spring中,注解是一種非常使用的工具。
因其強(qiáng)大的功能,極大的提高了我們開(kāi)發(fā)效率。
但是當(dāng)遇到一些特殊業(yè)務(wù)時(shí),框架自有的注解已經(jīng)不能滿(mǎn)足我們的需求了,這時(shí)我們就可以添加自定義注解來(lái)滿(mǎn)足我們的業(yè)務(wù)需求。
我們用@interface來(lái)聲明這是一個(gè)注解類(lèi)。
另外需要在這個(gè)注解類(lèi)上,再添加@Target 和?@Retention兩個(gè)注解,來(lái)聲明自定義注解的生效范圍和生命周期。
@Target:
ElementType.TYPE
:說(shuō)明該注解只能被聲明在一個(gè)類(lèi)前。ElementType.FIELD
:說(shuō)明該注解只能被聲明在一個(gè)類(lèi)的字段前。ElementType.METHOD
:說(shuō)明該注解只能被聲明在一個(gè)類(lèi)的方法前。ElementType.PARAMETER
:說(shuō)明該注解只能被聲明在一個(gè)方法參數(shù)前。ElementType.CONSTRUCTOR
:說(shuō)明該注解只能聲明在一個(gè)類(lèi)的構(gòu)造方法前。ElementType.LOCAL_VARIABLE
:說(shuō)明該注解只能聲明在一個(gè)局部變量前。ElementType.ANNOTATION_TYPE
:說(shuō)明該注解只能聲明在一個(gè)注解類(lèi)型前。ElementType.PACKAGE
:說(shuō)明該注解只能聲明在一個(gè)包名前
?@Retention:
RetentionPolicy.SOURCE
: 注解只保留在源文件中?RetentionPolicy.CLASS
?: 注解保留在class文件中,在加載到JVM虛擬機(jī)時(shí)丟棄RetentionPolicy.RUNTIME
: 注解保留在程序運(yùn)行期間,此時(shí)可以通過(guò)反射獲得定義在某個(gè)類(lèi)上的所有注解。
來(lái)看一段自定義注解的代碼
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface LockMethod {long waitTime() default 60L ;long leaseTime() default 60*1000L ;/*** 鎖key* @return*/String[] lockKeyInfo() ;/*** 鎖參數(shù)下標(biāo)列表,對(duì)應(yīng)下標(biāo)的參數(shù)值會(huì)作為鎖Key的一部分* @return*/int[] lockKeyArgIndexList() default {};
}
使用自定義的注解,只需要在方法上面加上
@LockMethod(lockKeyInfo = Constants.DAY_END_JOB,waitTime = WAIT_TIME,leaseTime = LEASE_TIME)public void test() {
}
這只是簡(jiǎn)單地定義了一個(gè)注解,但是實(shí)際的開(kāi)發(fā)工作中,自定義注解一般搭配Aop使用
比如設(shè)定加了自定義注解的方法執(zhí)行前要做什么,執(zhí)行后要做什么,具體如何使用也要根據(jù)具體的業(yè)務(wù)場(chǎng)景來(lái)實(shí)現(xiàn)~~