注解速覽
配置加載相關(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.active
和spring.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í)行標注方法
-
-
@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"; } // ... }
-