Spring Boot常用注解

注解速覽

配置加載相關(guān)

注解名 作用范圍 作用
@SpringBootApplication
@Configuration 表明該類是一個基于 Java 顯式裝配的 Spring 配置類
@ComponentScan 啟用組件掃描新锈,讓 Spring 自動發(fā)現(xiàn)并注冊組件類
@EnableAutoConfiguration
@ContextConfiguration

Bean 聲明注解

注解名 作用范圍 作用
@Component 表明該類是一個組件類眷柔,由 Spring 為該類創(chuàng)建 Bean
@Repository

Bean 注入注解

注解名 作用范圍 作用
@Autowired
@Resource
@Inject
@Qualifier

SpringMVC 注解

注解名 作用范圍 作用
@Controller 表明該類是 SpringMVC 中 的控制層組件
@RestController 該類中方法直接將字符串作為Web響應(yīng)返回
@Service 表明該類是 SpringMVC 中 的業(yè)務(wù)層組件
@RequestMapping 類、方法 將 Web 請求映射到對應(yīng)路徑的方法上進行處理。<br />類:該控制器中所有方法都會繼承 value 屬性指定的路徑卿啡。<br />方法:映射的路徑會繼承標注在類上的路徑。
@RequestParam
@PathVariable
@RequestBody
@ResponseBody
@ControllerAdvice 將類內(nèi)部@ExceptionHandler@InitBinder@ModelAttribute標注的方法應(yīng)用到所有@RequestMapping標注的方法上臣疑。
@ModelAttribute 方法、方法參數(shù) 方法:該方法會添加一個或多個屬性到 Model 上徙菠。<br />參數(shù):該方法的參數(shù)值由 Model 中取得讯沈。

MyBatis 注解

注解名 作用范圍 作用
@Param 方法參數(shù) Mapper 方法傳入多個參數(shù)時給參數(shù)指定別名
@Select 方法 標注方法執(zhí)行該 SQL 語句
@Insert 方法 同上
@Update 方法 同上
@Delete 方法 同上

配置加載相關(guān)

  • @SpringBootApplication:SpringBoot的核心注解,開啟了組件掃描和自動配置婿奔,實際上它是將@Configuration缺狠、@ComponentScan@EnableAutoConfiguration三個注解組合在了一起。
  • @Configuration:表明該類是一個基于 Java 顯式裝配的 Spring 配置類萍摊。
    <div></div>
  • <span id="@ComponentScan">@ComponentScan</span>:啟用組件掃描挤茄,讓 Spring 自動發(fā)現(xiàn)并注冊組件類( Web 控制器類及被@Component標注的其他組件類)。默認掃描與配置類相同的包冰木。
    @ComponentScan("com.test")@ComponentScan(basePackages={"com.test", "com.dev"})設(shè)置需要掃描的包穷劈。
  • @EnableAutoConfiguration:開啟 Spring Boot 的自動配置特性。
  • @ContextConfiguration(classes=TestConfig.class):表明該類需要在TestConfig類中加載配置

Bean 聲明注解

  • @Component:組件類片酝,由 Spring 為該類創(chuàng)建 Bean囚衔。
  • @Repository:數(shù)據(jù)訪問層組件(DAO)

Bean 注入注解

  • @Autowired:Spring 提供的自動裝配 Bean 的注解。默認按類型裝配雕沿,默認情況要求依賴對象必須存在。
    可應(yīng)用在構(gòu)造器猴仑、屬性的 Setter ()及其他方法上审轮,自動裝配匹配的 Bean。
    若要按名稱裝配辽俗,需結(jié)合@Qualifier("name")一起使用疾渣。

  • @Resource:JDK1.6支持的裝配注解,默認按名稱裝配崖飘,名稱可由name屬性指定榴捡。
    未指定name屬性時,若注解寫在字段上默認取字段名朱浴,若注解寫在setter方法上默認取屬性名吊圾,當沒有與名稱匹配的bean時再按類型進行裝配达椰;如果指定了name屬性,只會按名稱裝配项乒。

  • @Inject:Java 依賴注入規(guī)范的注解啰劲,作用近似@Autowired

  • @Qualifier("name"):限定符檀何,自動裝配時指定要注入的 Bean 名稱蝇裤。

Bean 初始化及銷毀

  • @Bean:表明該方法返回的對象會由 Spring 注冊為一個 Bean。默認的 Bean 都是單例的频鉴。
    @Bean("name")對生成的 Bean 命名栓辜。
    @Bean(initMethod="init",destroyMethod="destory"):指定 Bean 的初始化和銷毀方法,在構(gòu)造函數(shù)執(zhí)行后執(zhí)行初始化方法垛孔,在 Bean 銷毀前執(zhí)行銷毀方法啃憎。
  • @PostConstruct:表明在構(gòu)造函數(shù)執(zhí)行后執(zhí)行被標注的方法。
  • @PreDestroy:表明在 Bean 銷毀前執(zhí)行被標注的方法似炎。
  • @DependsOn:定義 Bean 初始化及銷毀時的順序辛萍。
  • @Primary:當自動裝配有多個匹配的 Bean 時,被標注的 Bean 將作為首選羡藐,若無標注則拋出異常贩毕。
  • @Lazy(true):延遲初始化

Bean 條件化裝配

  • @Profile("dev"):應(yīng)用在類、方法級別上仆嗦,表明在對應(yīng)的 profile 文件處于激活狀態(tài)時才會進行 Bean 裝配辉阶。
    通過設(shè)置 spring.profiles.activespring.profiles.default 這兩個屬性來確定哪個 profile 文件處于激活狀態(tài)。
  • @ActiveProfiles("dev"):指定運行測試時要激活的 profile 文件瘩扼。

SpringMVC 注解

  • @Controller:表明該類是 SpringMVC 中 的控制層組件谆甜,是一個處理 HTTP 請求的控制器,該類中所有被@RequestMapping標注的方法都會用來處理對應(yīng)URL的請求

  • @RestController:一種 Web Controller 注解集绰,表明該類中方法直接將字符串作為Web響應(yīng)返回规辱,效果同@ResponseBody

  • @Service:表明該類是 SpringMVC 中 的業(yè)務(wù)層組件

  • @RequestMapping:該注解將 Web 請求映射到對應(yīng)路徑的方法上進行處理栽燕,可被標注在類或方法上罕袋。

    @RequestMapping(value = "/code", method = POST)中,value 屬性指定方法所要處理的請求路徑碍岔;method 屬性指定所處理的 HTTP 方法浴讯,method 屬性為空時,默認處理 GET 方法蔼啦。

    標注在類時榆纽,表明該控制器中所有方法都會繼承 value 屬性指定的路徑。

    標注方法時,映射的路徑會繼承標注在類上的路徑奈籽,將訪問路徑的 HTTP 請求交給被標注的方法處理饥侵。

  • @RequestParam("id"):標注在方法參數(shù)前,將請求中的變量綁定到方法參數(shù)上(參數(shù)形式:/query?id=123)唠摹,該注解默認使用爆捞,可不配置。
    若請求中無對應(yīng)參數(shù)勾拉,可采用defaultValue屬性設(shè)置默認值煮甥。

  • @PathVariable("id"):標注在方法參數(shù)前,通過在@RequestMapping路徑中添加占位符{}藕赞,從而將請求路徑中的變量綁定到方法參數(shù)上(參數(shù)形式:/query/{id})成肘。
    若占位符名稱與方法參數(shù)名相同,可去掉value屬性:

    @RequestMapping(value = "/query/{id}", method = GET)
    public String queryById(@PathVariable int id) {
      // ...
    }
    
  • @RequestBody:作用于方法參數(shù)斧蜕,根據(jù)HTTP Request Header的 content-Type 的內(nèi)容双霍,將接收到的 Request 對象的 body 數(shù)據(jù)經(jīng)過適當?shù)?HttpMessageConverter 轉(zhuǎn)換為 Java 類。

  • @ResponseBody:直接將字符串作為Web響應(yīng)(Reponse Body)返回批销。根據(jù)HTTP Request Header的 Accept 的內(nèi)容洒闸,將標注方法返回的對象經(jīng)過適當?shù)?HttpMessageConverter 轉(zhuǎn)換為指定格式后,寫入到Response對象的body數(shù)據(jù)區(qū)均芽。(默認將對象轉(zhuǎn)換為JSON字符串返回)

  • @ControllerAdvice:標注在類上丘逸。

    將類內(nèi)部@ExceptionHandler@InitBinder掀宋、@ModelAttribute標注的方法應(yīng)用到所有@RequestMapping標注的方法上深纲。

    該類中各個注解的行為:

    • @ModelAttribute:在@RequestMapping注解方法執(zhí)行之前,把標注方法的返回值放入 Model 中
    • @InitBinder:在@RequestMapping注解方法執(zhí)行之前劲妙,初始化數(shù)據(jù)綁定器
    • @ExceptionHandler:當@RequestMapping注解方法拋出UnauthenticatedException異常時執(zhí)行標注方法

    參考:Spring3.2新注解@ControllerAdvice

  • @ModelAttribute:可被標注在方法或方法參數(shù)上湃鹊。

    標注在方法上

    表明該方法會添加一個或多個屬性到 Model 上。在 Controller 接收到請求調(diào)用@RequestMapping標注方法之前镣奋,會先調(diào)用當前 Controller 中全部的@ModelAttribute標注方法币呵。

    @ModelAttribute標注在@RequestMapping標注方法上時,方法返回值將被解釋為 Model 的一個屬性唆途,而非一個視圖名富雅。

    @ModelAttribute標注方法通常用來填充一些公共的屬性或數(shù)據(jù),如下拉列表的預(yù)設(shè)狀態(tài)肛搬、寵物的類型,或是去取前端表單渲染所需的對象毕贼,如 Account温赔。

    標注方式:

    • 通過方法返回值默認添加屬性(未顯示指定屬性名時將設(shè)置默認值):

      @ModelAttribute
      public Account addAccount(@RequestParam String number) {
          return accountManager.findAccount(number);
      }
      
    • 方法接收一個 Model 對象,向其中添加屬性:

      @ModelAttribute
      public void populateModel(@RequestParam String number, Model model) {
          model.addAttribute(accountManager.findAccount(number));
          // add more ...
      }
      

    標注在參數(shù)上:

    表明該方法的參數(shù)值由 Model 中取得鬼癣,若未取到則實例化該參數(shù)并添加到 Model 中陶贼,請求中所有名稱匹配的數(shù)據(jù)都會綁定到該參數(shù)中啤贩。

    以下面的代碼為例:

    @RequestMapping(path = "/accounts/{account}", method = RequestMethod.PUT)
    public String save(@ModelAttribute("account") Account account) {
        // ...
    }
    

    該方法中 Account 類型的實例可能來自于:

    • 因為@SessionAttributes標注的使用已經(jīng)存在于 Model 中
    • 在同個控制器中使用了@ModelAttribute方法已經(jīng)存在于 Model 中
    • 由URI模板變量和類型轉(zhuǎn)換中取得的
    • 調(diào)用了自身的默認構(gòu)造器被實例化出來的

    URI模板變量和類型轉(zhuǎn)換:

    該例中,Model 屬性的名稱("account")與URI模板變量的名稱相匹配拜秧。如果配置了將String類型的賬戶值轉(zhuǎn)換成Account類型實例的轉(zhuǎn)換器Converter<String, Account>痹屹,就可以實現(xiàn)自動轉(zhuǎn)換,不需要再額外寫一個@ModelAttribute方法枉氮。

    數(shù)據(jù)綁定:

    WebDataBinder類將與 Model 屬性名稱匹配的查詢參數(shù)和表單字段等請求參數(shù)進行類型轉(zhuǎn)換后綁定到對應(yīng)的屬性上志衍。

    進行數(shù)據(jù)綁定時可能會出現(xiàn)一些錯誤,若想檢查這些錯誤聊替,可以在標注@ModelAttribute的參數(shù)緊跟著聲明一個BindingResult參數(shù):

    @RequestMapping(path = "/owners/{ownerId}/pets/{petId}/edit", method = RequestMethod.POST)
    public String processSubmit(@ModelAttribute("pet") Pet pet, BindingResult result) {
        if (result.hasErrors()) {
            return "petForm";
        }
        // ...
    }
    

    參考:Spring MVC @ModelAttribute詳解

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末楼肪,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子惹悄,更是在濱河造成了極大的恐慌春叫,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泣港,死亡現(xiàn)場離奇詭異暂殖,居然都是意外死亡,警方通過查閱死者的電腦和手機当纱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門呛每,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人惫东,你說我怎么就攤上這事莉给。” “怎么了廉沮?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵颓遏,是天一觀的道長。 經(jīng)常有香客問我滞时,道長叁幢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任坪稽,我火速辦了婚禮曼玩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘窒百。我一直安慰自己黍判,他們只是感情好,可當我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布篙梢。 她就那樣靜靜地躺著顷帖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贬墩,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天榴嗅,我揣著相機與錄音,去河邊找鬼陶舞。 笑死嗽测,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的肿孵。 我是一名探鬼主播唠粥,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼颁井!你這毒婦竟也來了厅贪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤雅宾,失蹤者是張志新(化名)和其女友劉穎养涮,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體眉抬,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡贯吓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蜀变。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片悄谐。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖库北,靈堂內(nèi)的尸體忽然破棺而出爬舰,到底是詐尸還是另有隱情,我是刑警寧澤寒瓦,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布情屹,位于F島的核電站,受9級特大地震影響杂腰,放射性物質(zhì)發(fā)生泄漏垃你。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一喂很、第九天 我趴在偏房一處隱蔽的房頂上張望惜颇。 院中可真熱鬧,春花似錦少辣、人聲如沸凌摄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽望伦。三九已至林说,卻和暖如春煎殷,著一層夾襖步出監(jiān)牢的瞬間屯伞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工豪直, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留劣摇,地道東北人。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓弓乙,卻偏偏與公主長得像末融,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子暇韧,可洞房花燭夜當晚...
    茶點故事閱讀 43,724評論 2 351

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