Spring注解大全

Spring注解歸納總結(jié)

分類

組件注解(聲明bean的注解)

組件注解(聲明bean的注解)
@Component 組件,沒有明確的角色
@Controller 在展現(xiàn)層使用采幌,控制器的聲明
@Service 在業(yè)務(wù)邏輯層使用(service層)
@Repository 在數(shù)據(jù)訪問層使用(dao層)

@Component(“xxx”)
指定某個類是容器的bean苞也,@Component(value="xx")相當(dāng)于<bean id="xx" />璃氢,其中value可以不寫扇苞。用于標(biāo)注類為容器bean的注解有四個据某,主要用于區(qū)別不同的組件類橡娄,提高代碼的可讀性
@Component,用于標(biāo)注一個普通的類
@Controller 用于標(biāo)注一個控制器類
@Service 用于標(biāo)注業(yè)務(wù)邏輯類
@Repository 用于標(biāo)注DAO數(shù)據(jù)訪問類
現(xiàn)在這幾個注解沒有什么區(qū)別诗箍,盡量根據(jù)類的不同功能選擇合適的注解癣籽。
注解用于修飾類挽唉,當(dāng)不寫value屬性值時,默認(rèn)值為類名首字母小寫筷狼。



組件掃描注解

組件掃描注解
@ComponentScan 用于對Component進(jìn)行掃描瓶籽,相當(dāng)于xml中的context:component-scan/(類上)


自動裝配(注入bean的注解)

自動裝配(注入bean的注解)
@Resource 由JSR-250提供
@Autowired 組件,沒有明確的角色
@Inject 由JSR-330提供
  • @Resource(name=“xx”)
    @Resource 可以修飾成員變量也可以修飾set方法埂材。當(dāng)修飾成員變量時可以不寫set方法塑顺,此時spring會直接使用j2ee規(guī)范的Field注入。
    @Resource有兩個比較重要的屬性俏险,name和type

    • 如果指定了name和type严拒,則從Spring容器中找到唯一匹配的bean進(jìn)行裝配,找不到則拋出異常;
    • 如果指定了name竖独,則從spring容器查找名稱(id)匹配的bean進(jìn)行裝配裤唠,找不到則拋出異常;
    • 如果指定了type,則從spring容器中找到類型匹配的唯一bean進(jìn)行裝配莹痢,找不到或者找到多個种蘸,都會拋出異常;
    • 如果既沒有指定name,又沒有指定type竞膳,則自動按照byName方式進(jìn)行裝配
    • 如果沒有寫name屬性值時
      • 修飾成員變量航瞭,此時name為成員變量名稱
      • 修飾set方法,此時name 為set方法的去掉set后首字母小寫得到的字符串
  • @Autowired(required=false)
    @Autowired可以修飾構(gòu)造器坦辟,成員變量刊侯,set方法,普通方法锉走。@Autowired默認(rèn)使用byType方式自動裝配滔吠。required標(biāo)記該類型的bean是否時必須的,默認(rèn)為必須存在(true)挠日。
    可以配合@Qualifier(value="xx"),實(shí)現(xiàn)按beanName注入疮绷。

    • required=true(默認(rèn)),為true時嚣潜,從spring容器查找和指定類型匹配的bean冬骚,匹配不到或匹配多個則拋出異常
    • 使用@Qualifier("xx"),則會從spring容器匹配類型和 id 一致的bean,匹配不到則拋出異常
    • @Autowired修飾成員變量懂算。該類型為成員變量類型
    • @Autowired修飾方法只冻,構(gòu)造器。注入類型為參數(shù)的數(shù)據(jù)類型计技,當(dāng)然可以有多個參數(shù)


bean相關(guān)注解(Bean的屬性支持)

bean相關(guān)注解(Bean的屬性支持)
@Bean 注解在方法上喜德,聲明當(dāng)前方法的返回值為一個bean,替代xml中的方式(方法上)
@Scope 設(shè)置Spring容器如何新建Bean實(shí)例(方法上垮媒,得有@Bean)
@DependsOn 該注解也是配合@Component這類注解使用舍悯,用于強(qiáng)制初始化其他bean
@Lazy
@PostConstruct (singleton作用域)的生命周期的行為注解
@PreDestroy (singleton作用域)的生命周期的行為注解
  • @Bean(name=“xxx”)
    修飾方法航棱,該方法的返回值定義為容器中的bean。該注解相當(dāng)于<bean />元素
    常用的屬性

    • name:bean id 萌衬。name可以省略饮醇,省略時name值為方法名。
    • autowire: 是否自動注入秕豫,默認(rèn)Autowire . NO
    • initMethod:bean的初始化方法朴艰。在依賴注入之后執(zhí)行< bean id="" init-method="">
    • destroyMethod: spring容器關(guān)閉時bean調(diào)用的方法 < bean id="" destroty-method="">
    • 當(dāng)然@Bean還可以配合@Scope指定bean的作用域
  • @Scope(“prototype”)
    該注解和@Component這一類注解聯(lián)合使用,用于標(biāo)記該類的作用域混移,默認(rèn)singleton祠墅。也可以和@Bean一起使用,此時@Scope修飾一個方法歌径。

  • @Lazy(true)
    指定bean是否延時初始化饵隙,相當(dāng)于< bean id="xx" lazy-init=""> ,默認(rèn)false沮脖。@Lazy可以和@Component這一類注解聯(lián)合使用修飾類金矛,也可以和@Bean一起使用修飾方法
    注:此處初始化不是指不執(zhí)行init-method,而是不創(chuàng)建bean實(shí)例和依賴注入勺届。只有當(dāng)該bean(被@Lazy修飾的類或方法)被其他bean引用(可以是自動注入的方式)或者執(zhí)行g(shù)etBean方法獲取驶俊,才會真正的創(chuàng)建該bean實(shí)例,其實(shí)這也是BeanFactory的執(zhí)行方式免姿。

  • @PostConstructor和@PreDestroy
    @PostConstructor和@PreDestroy這兩個注解是j2ee規(guī)范下的注解饼酿。這兩個注解用于修飾方法,spring用這兩個注解管理容器中spring生命周期行為胚膊。
    @PostConstructor 從名字可以看出構(gòu)造器之后調(diào)用,相當(dāng)于< bean init-method="">故俐。就是在依賴注入之后執(zhí)行
    @PreDestroy 容器銷毀之前bean調(diào)用的方法,相當(dāng)于 < bean destroy-method="">



AOP 相關(guān)注解

該注解是AspectJ中的注解紊婉,并不是spring提供的药版,所以還需要導(dǎo)入aspectjweaver.jar,aspectjrt.jar喻犁,除此之外還需要依賴aopalliance.jar

AOP 相關(guān)注解
@Aspect 修飾Java類槽片,指定該類為切面類。當(dāng)spring容器檢測到某個bean被@Aspect修飾時肢础,spring容器不會對該bean做增強(qiáng)處理(bean后處理器增強(qiáng)还栓,代理增強(qiáng))
@Before 修飾方法,before增強(qiáng)處理传轰。有一個value屬性用于指定切入點(diǎn)表達(dá)式剩盒。用于對目標(biāo)方法(切入點(diǎn)表達(dá)式指定方法)執(zhí)行前做增強(qiáng)處理】埽可以用于權(quán)限檢查辽聊,登陸檢查
@AfterReturning 修飾方法纪挎,afterreturning增強(qiáng)處理。目標(biāo)方法正常結(jié)束后做增強(qiáng)處理常用屬性 1身隐、{pointcut/value:定義切入點(diǎn)} 2廷区、{returning:指定一個參數(shù)名唯灵,用于接受目標(biāo)方法正常結(jié)束時返回的值贾铝。在增強(qiáng)方法中定義同名的參數(shù)。}
@AfterThrowing 修飾方法埠帕,afterthrowing增強(qiáng)處理垢揩。當(dāng)目標(biāo)程序方法拋出 異常或者異常無法捕獲時敛瓷,做增強(qiáng)處理叁巨。常用屬性:1、{pointcut/value :指定切入點(diǎn)表達(dá)式}2呐籽、{throwing:指定一個形參锋勺,在增強(qiáng)方法中定義同名形參,用于訪問目標(biāo)方法拋出的異常}
@After 修飾方法 狡蝶,after增強(qiáng)處理庶橱。無論方法是否正常結(jié)束,都會調(diào)用該增強(qiáng)處理(@After= @AfterReturning+@AfterThrowing)贪惹。一般用于釋放資源苏章。有一個value屬性,用于指定切入點(diǎn)表達(dá)式奏瞬。
@Around 修飾方法枫绅, around增強(qiáng)處理。該處理可以目標(biāo)方法執(zhí)行之前和執(zhí)行之后織入增強(qiáng)處理硼端,可以看作時@Before和@AfterReturning的總和并淋。有一個value屬性,指定切入點(diǎn)表達(dá)式珍昨。Around增強(qiáng)處理通常需要在線程安全的環(huán)境下使用预伺,如果@Before和@AfterReturning可以處理就沒必要使用@After Returning。當(dāng)定義一個Aound增前處理時曼尊,增強(qiáng)方法第一形參需要時ProceedingJoinPoint類型酬诀。ProceedingJoin Point有一個Object proceed()方法,用于執(zhí)行目標(biāo)方法,返回對象當(dāng)然也可以為目標(biāo)方法傳遞數(shù)組參數(shù)骆撇。
@Pointcut 聲明切點(diǎn)在java配置類中使用@EnableAspectJAutoProxy注解開啟Spring對AspectJ代理的支持(類上)
@Order 當(dāng)不同的切面中的兩個增強(qiáng)處理需要在同一個連接點(diǎn)被織入時瞒御,spring aop可以指定不同切面類的增強(qiáng)處理優(yōu)先級。有一個value屬性神郊,指定一個int值肴裙,屬性值越小優(yōu)先級越高趾唱。


Java配置類相關(guān)注解

Java配置類相關(guān)注解
@Configuration 修飾一個Java類,被修飾的類相當(dāng)于一個xml文件蜻懦,相當(dāng)于< beans> </ beans>在springboot中大量使用了該注解甜癞,該注解提供了一種使用Java類方式配置bean。
@Import @Import({xxx.class})修飾Java類宛乃,用于向當(dāng)前配置類導(dǎo)入其他java配置類
@ImportResource @ImportResource(”classpath: /aa.xml“)修飾Java類悠咱,用于向當(dāng)前注解類導(dǎo)入xml配置文件
@Value @Value("${expression}")修飾成員變量或者 方法構(gòu)造器的參數(shù),常用于注入屬性文件中的值征炼。注意:@Value不能對 static 屬性注入析既。
@ConfigurationProperties 用于從屬性文件中注入值 ,修飾類
@PropertySource 用于加載配置文件
  • @PropertySource(value=“classpath:jdbc.properties”)
    用于加載配置文件
    存在的屬性:
    • ignoreResourceNotFound: 當(dāng)資源文件找不到的時候是否會忽略改配置谆奥,一般用于可選項
    • encoding : 資源文件使用什么編碼方式


環(huán)境切換

環(huán)境切換
@Profile 通過設(shè)定Environment的ActiveProfiles來設(shè)定當(dāng)前context需要使用的配置環(huán)境眼坏。(類或方法上)
@Conditional Spring4中可以使用此注解定義條件話的bean,通過實(shí)現(xiàn)Condition接口酸些,并重寫matches方法宰译,從而決定該bean是否被實(shí)例化。(方法上)


異步相關(guān)

異步相關(guān)
@EnableAsync 配置類中魄懂,通過此注解開啟對異步任務(wù)的支持沿侈,敘事性AsyncConfigurer接口(類上)
@Async 在實(shí)際執(zhí)行的bean方法使用該注解來申明其是一個異步任務(wù)(方法上或類上所有的方法都將異步,需要@EnableAsync開啟異步任務(wù))


定時任務(wù)相關(guān)

定時任務(wù)相關(guān)
@EnableScheduling 在配置類上使用逢渔,開啟計劃任務(wù)的支持(類上)
@Scheduled 來申明這是一個任務(wù)肋坚,包括cron,fixDelay,fixRate等類型(方法上,需先開啟計劃任務(wù)的支持)


Enable注解說明

這些注解主要用來開啟對xxx的支持肃廓。

Enable注解說明
@EnableAspectJAutoProxy 開啟對AspectJ自動代理的支持
@EnableAsync 開啟異步方法的支持
@EnableScheduling 開啟計劃任務(wù)的支持
@EnableWebMvc 開啟Web MVC的配置支持
@EnableConfigurationProperties 開啟對@ConfigurationProperties注解配置Bean的支持
@EnableJpaRepositories 開啟對SpringData JPA Repository的支持
@EnableTransactionManagement 開啟注解式事務(wù)的支持
@EnableCaching 開啟注解式的緩存支持


測試相關(guān)注解

測試相關(guān)注解
@RunWith 運(yùn)行器智厌,Spring中通常用于對JUnit的支持 @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration 用來加載配置ApplicationContext,其中classes屬性用來加載配置類 @ContextConfiguration(classes={TestConfig.class})


SpringMVC部分

SpringMVC部分
@EnableWebMvc 在配置類中開啟Web MVC的配置支持盲赊,如一些ViewResolver或者M(jìn)essageConverter等铣鹏,若無此句,重寫WebMvcConfigurerAdapter方法(用于對SpringMVC的配置)哀蘑。
@Controller 聲明該類為SpringMVC中的Controller
@RequestMapping 用于映射Web請求诚卸,包括訪問路徑和參數(shù)(類或方法上)
@ResponseBody 支持將返回值放在response內(nèi),而不是一個頁面绘迁,通常用戶返回json數(shù)據(jù)(返回值旁或方法上)
@RequestBody 允許request的參數(shù)在request體中合溺,而不是在直接連接在地址后面。(放在參數(shù)前)
@PathVariable 用于接收路徑參數(shù)缀台,比如@RequestMapping("/hello/{name}")申明的路徑棠赛,將注解放在參數(shù)中前,即可獲取該值,通常作為Restful的接口實(shí)現(xiàn)方法睛约。
@RestController 該注解為一個組合注解鼎俘,相當(dāng)于@Controller和@ResponseBody的組合,注解在類上辩涝,意味著贸伐,該Controller的所有方法都默認(rèn)加上了@ResponseBody。
@ControllerAdvice 通過該注解怔揩,我們可以將對于控制器的全局配置放置在同一個位置捉邢,注解了@Controller的類的方法可使用@ExceptionHandler、@InitBinder沧踏、@ModelAttribute注解到方法上歌逢,
這對所有注解了 @RequestMapping的控制器內(nèi)的方法有效巾钉。
@ExceptionHandler 用于全局處理控制器里的異常
@InitBinder 用來設(shè)置WebDataBinder翘狱,WebDataBinder用來自動綁定前臺請求參數(shù)到Model中。
@ModelAttribute 本來的作用是綁定鍵值對到Model里砰苍,在@ControllerAdvice中是讓全局的@RequestMapping都能獲得在此處設(shè)置的鍵值對潦匈。
@CrossOrigin 用于解決跨域問題,只需在接口上進(jìn)行聲明即可赚导,替代過慮器或攔截方式茬缩。

版權(quán)聲明:文章內(nèi)容總結(jié)于網(wǎng)絡(luò),如侵犯到原作者權(quán)益吼旧,請與我聯(lián)系刪除或授權(quán)事宜

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末凰锡,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子圈暗,更是在濱河造成了極大的恐慌掂为,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件员串,死亡現(xiàn)場離奇詭異勇哗,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)寸齐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進(jìn)店門欲诺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人渺鹦,你說我怎么就攤上這事扰法。” “怎么了毅厚?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵塞颁,是天一觀的道長。 經(jīng)常有香客問我,道長殴边,這世上最難降的妖魔是什么憎茂? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮锤岸,結(jié)果婚禮上竖幔,老公的妹妹穿的比我還像新娘。我一直安慰自己是偷,他們只是感情好拳氢,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蛋铆,像睡著了一般馋评。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上刺啦,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天留特,我揣著相機(jī)與錄音,去河邊找鬼玛瘸。 笑死蜕青,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的糊渊。 我是一名探鬼主播右核,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼渺绒!你這毒婦竟也來了贺喝?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤宗兼,失蹤者是張志新(化名)和其女友劉穎躏鱼,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體针炉,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡挠他,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了篡帕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片殖侵。...
    茶點(diǎn)故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖镰烧,靈堂內(nèi)的尸體忽然破棺而出拢军,到底是詐尸還是另有隱情,我是刑警寧澤怔鳖,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布茉唉,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏度陆。R本人自食惡果不足惜艾凯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望懂傀。 院中可真熱鬧趾诗,春花似錦、人聲如沸蹬蚁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽犀斋。三九已至贝乎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間叽粹,已是汗流浹背览效。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留球榆,地道東北人朽肥。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓禁筏,卻偏偏與公主長得像持钉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子篱昔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評論 2 361