Spring注解及其功能(持續(xù)更新)

由于項(xiàng)目使用了spring boot,所以經(jīng)常需要使用spring的一些注解來(lái)簡(jiǎn)化代碼和配置,以下羅列一些平時(shí)工作中使用的注解

@Autowired

此注解的作用是把對(duì)應(yīng)的服務(wù)類(lèi)根據(jù)類(lèi)型byType注入到Spring容器中

@Resource

此注解并不是spring的它掂,而是j2ee的迈窟,但是spring也支持此注解剧蚣,這個(gè)注解注入的方式和@Autowired不一樣的地方是這個(gè)是根據(jù)名稱(chēng)byName來(lái)實(shí)現(xiàn)的

@RequestMapping

根據(jù)Spring MVC架構(gòu)俱诸,需要把對(duì)應(yīng)的http請(qǐng)求映射到對(duì)應(yīng)的控制器上十电,這時(shí)候就需要用到這個(gè)注解了绿鸣,

主要作用是配置url映射,當(dāng)控制器在類(lèi)級(jí)別上添加@RequestMapping注解時(shí)栽燕,這個(gè)注解會(huì)應(yīng)用到控制器的所有處理器方法上罕袋。處理器方法上的@RequestMapping注解會(huì)對(duì)類(lèi)級(jí)別上的@RequestMapping的聲明進(jìn)行補(bǔ)充。

@Controller? ? ??@Controller 用來(lái)響應(yīng)頁(yè)面纫谅,必須配合模版來(lái)使用

@RestController? ?@RestController是@ResponseBody和@Controller的組合注解炫贤。

?@RolesAllowed 表示訪(fǎng)問(wèn)對(duì)應(yīng)方法時(shí)所應(yīng)該具有的角色溅固,使用前需要導(dǎo)入Jsr-250-api依賴(lài),開(kāi)啟注解?

@Async 作用在方法上付秕,表示此方法和方法的調(diào)用者之間是異步的,即調(diào)用此方法的方法不需要等這個(gè)方法執(zhí)行完畢再執(zhí)行之后的代碼

@ApiOperation? ?這個(gè)注解并不是Spring的侍郭,它是swagger里的注解询吴,但是這個(gè)注解配合Spring可以很好的解決一個(gè)問(wèn)題,就是用來(lái)構(gòu)建API接口文檔的亮元,具體的使用方式是@ApiOperation(value = “接口說(shuō)明”, httpMethod = “接口請(qǐng)求方式”, response = “接口返回參數(shù)類(lèi)型”, notes = “接口發(fā)布說(shuō)明”猛计;)等

@Deprecated? 這個(gè)也是jdk自帶的注解,主要作用就是表明這個(gè)方法或者類(lèi)已經(jīng)廢棄爆捞,

@Around

@Bean

@Before

@After




注解的實(shí)現(xiàn)原理

首先我們需要了解Java為我們提供的元注解和相關(guān)定義注解的語(yǔ)法奉瘤,舉例如下@Target({ElementType.METHOD})

@Documented

@Retention(RetentionPolicy.RUNTIME)

public @interface Demo {

boolean value()default true;

}

注解的實(shí)現(xiàn)都是使用@interface 類(lèi)似于我們的class 和interface

jdk定義了四個(gè)使用在注解上的注解來(lái)實(shí)現(xiàn)其他定義的注解,你可以把這四個(gè)注解理解為基礎(chǔ)注解煮甥,不需要你考慮盗温,jdk定義的四個(gè)注解分別為1.@Target,? 2.@Retention,? 3.@Documented,? 4.@Inherited

1: @Target

作用:用于描述注解的使用范圍(即:被描述的注解可以用在什么地方)

取值(ElementType)有:

1.CONSTRUCTOR:用于描述構(gòu)造器

2.FIELD:用于描述域

3.LOCAL_VARIABLE:用于描述局部變量

4.METHOD:用于描述方法

5.PACKAGE:用于描述包

6.PARAMETER:用于描述參數(shù)

7.TYPE:用于描述類(lèi)、接口(包括注解類(lèi)型) 或enum聲明

比如我們上面舉的例子demo中就是表示demo注解可以使用在方法上

2:@Retention

作用:表示需要在什么級(jí)別保存該注釋信息成肘,用于描述注解的生命周期(即:被描述的注解在什么范圍內(nèi)有效)

 取值(RetentionPoicy)有:

1.SOURCE:在源文件中有效(即源文件保留)

2.CLASS:在class文件中有效(即class保留)

3.RUNTIME:在運(yùn)行時(shí)有效(即運(yùn)行時(shí)保留)

一般而言卖局,我們的注解都是使用RUNTIME運(yùn)行時(shí)有效

3:@Document

用于描述其它類(lèi)型的annotation應(yīng)該被作為被標(biāo)注的程序成員的公共API,因此可以被例如javadoc此類(lèi)的工具文檔化双霍。Documented是一個(gè)標(biāo)記注解砚偶,沒(méi)有成員。

注解是根據(jù)Spring的aop原理來(lái)實(shí)現(xiàn)的洒闸,aop的原理又是基于java的動(dòng)態(tài)代理和cglib(基于字節(jié)碼)的包來(lái)實(shí)現(xiàn)

一般定義完一個(gè)注解后染坯,需要實(shí)現(xiàn)注解的功能,就需要新增一個(gè)類(lèi)專(zhuān)門(mén)去實(shí)現(xiàn)這個(gè)注解的功能了

類(lèi)名一般和注解名一樣丘逸,也可以在注解名后面寫(xiě)上Aspect

定義好類(lèi)之后单鹿,怎么把注解和對(duì)應(yīng)的類(lèi)進(jìn)行關(guān)聯(lián)呢,我們就需要定義一個(gè)切點(diǎn)方法(因?yàn)槲覀冎雷⒔獗旧砭褪腔赟pring的aop原理來(lái)實(shí)現(xiàn)的)

所以先定義好一個(gè)切點(diǎn)方法

public void point(){

? ??

},在這個(gè)方法上使用spring自帶的切點(diǎn)注解來(lái)和實(shí)現(xiàn)類(lèi)和注解的關(guān)聯(lián)

@Point("@annotation(com.xidian.haitang.annotations.Demo)")

public void point(){

}

這樣我們就可以利用spring的aop原理和自帶的注解來(lái)實(shí)現(xiàn)具體功能了鸣个,例如

@Before("point")

@After("point")

@Around("point()")

這樣就是一個(gè)自定義的注解了羞反。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末布朦,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子昼窗,更是在濱河造成了極大的恐慌是趴,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,378評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件澄惊,死亡現(xiàn)場(chǎng)離奇詭異唆途,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)掸驱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)肛搬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人毕贼,你說(shuō)我怎么就攤上這事温赔。” “怎么了鬼癣?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,983評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵陶贼,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我待秃,道長(zhǎng)拜秧,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,938評(píng)論 1 299
  • 正文 為了忘掉前任章郁,我火速辦了婚禮枉氮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘暖庄。我一直安慰自己聊替,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布雄驹。 她就那樣靜靜地躺著佃牛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪医舆。 梳的紋絲不亂的頭發(fā)上俘侠,一...
    開(kāi)封第一講書(shū)人閱讀 52,549評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音蔬将,去河邊找鬼爷速。 笑死,一個(gè)胖子當(dāng)著我的面吹牛霞怀,可吹牛的內(nèi)容都是我干的惫东。 我是一名探鬼主播,決...
    沈念sama閱讀 41,063評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼廉沮!你這毒婦竟也來(lái)了颓遏?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,991評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤滞时,失蹤者是張志新(化名)和其女友劉穎叁幢,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體坪稽,經(jīng)...
    沈念sama閱讀 46,522評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡曼玩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了窒百。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片黍判。...
    茶點(diǎn)故事閱讀 40,742評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖篙梢,靈堂內(nèi)的尸體忽然破棺而出顷帖,到底是詐尸還是另有隱情,我是刑警寧澤庭猩,帶...
    沈念sama閱讀 36,413評(píng)論 5 351
  • 正文 年R本政府宣布窟她,位于F島的核電站陈症,受9級(jí)特大地震影響蔼水,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜录肯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評(píng)論 3 335
  • 文/蒙蒙 一趴腋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧论咏,春花似錦优炬、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,572評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至养涮,卻和暖如春葵硕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背贯吓。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,671評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工懈凹, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人悄谐。 一個(gè)月前我還...
    沈念sama閱讀 49,159評(píng)論 3 378
  • 正文 我出身青樓介评,卻偏偏與公主長(zhǎng)得像托猩,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子毫痕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容