全面匯總SpringBoot和SpringClould常用注解
什么是注解?
Java注解是附加在代碼中的一些元信息,用于一些工具在編譯、運(yùn)行時(shí)進(jìn)行解析和使用,起到說(shuō)明、配置的功能
注解本質(zhì)上繼承 Annotation 接口,我們可以通過(guò)反射獲取注解的相關(guān)信息,從而做些邏輯操作 springboot里⾯大量使用了注解,
@Controller 、@RestController 、@Service、 @Autowire
等
一、SpringBoot注解
1.1.@SpringBootApplication
包含@Configuration、@EnableAutoConfiguration、@ComponentScan
通常用在主類上。
1.2.@Repository
用于標(biāo)注數(shù)據(jù)訪問(wèn)組件,即DAO組件。
1.3.@Service
用于標(biāo)注業(yè)務(wù)層組件。
1.4.@RestController
用于標(biāo)注控制層組件(如struts中的action),包含@Controller和@ResponseBody。
1.5.@ResponseBody
表示該方法的返回結(jié)果直接寫(xiě)入HTTP response body中
一般在異步獲取數(shù)據(jù)時(shí)使用,在使用@RequestMapping
后,返回值通常解析為跳轉(zhuǎn)路徑,加上@responsebody后返回結(jié)果不會(huì)被解析為跳轉(zhuǎn)路徑,而是直接寫(xiě)入HTTP response body中。比如異步獲取json數(shù)據(jù),加上@responsebody后,會(huì)直接返回json數(shù)據(jù)。
1.6.@Component
泛指組件,當(dāng)組件不好歸類的時(shí)候,我們可以使用這個(gè)注解進(jìn)行標(biāo)注。
1.7.@ComponentScan
組件掃描。個(gè)人理解相當(dāng)于context:component-scan,如果掃描到有@Component @Controller @Service
等這些注解的類,則把這些類注冊(cè)為bean。
1.8.@Configuration
指出該類是 Bean 配置的信息源,相當(dāng)于XML中的,一般加在主類上。
1.9.@Bean
相當(dāng)于XML中的,放在方法的上面,而不是類,意思是產(chǎn)生一個(gè)bean,并交給spring管理。
1.10.@EnableAutoConfiguration
讓 Spring Boot 根據(jù)應(yīng)用所聲明的依賴來(lái)對(duì) Spring 框架進(jìn)行自動(dòng)配置,一般加在主類上。
1.11.@AutoWired
byType方式。把配置好的Bean拿來(lái)用,完成屬性、方法的組裝,它可以對(duì)類成員變量、方法及構(gòu)造函數(shù)進(jìn)行標(biāo)注,完成自動(dòng)裝配的工作。
當(dāng)加上(required=false)時(shí),就算找不到bean也不報(bào)錯(cuò)。
1.12.@Qualifier
當(dāng)有多個(gè)同一類型的Bean時(shí),可以用@Qualifier(“name”)來(lái)指定。與@Autowired配合使用
1.13.@Resource(name=“name”,type=“type”)
沒(méi)有括號(hào)內(nèi)內(nèi)容的話,默認(rèn)byName。與@Autowired干類似的事。
1.14.@RequestMapping
RequestMapping是一個(gè)用來(lái)處理請(qǐng)求地址映射的注解,可用于類或方法上。用于類上,表示類中的所有響應(yīng)請(qǐng)求的方法都是以該地址作為父路徑。
該注解有六個(gè)屬性:
params:指定request中必須包含某些參數(shù)值是,才讓該方法處理。
headers:指定request中必須包含某些指定的header值,才能讓該方法處理請(qǐng)求。
value:指定請(qǐng)求的實(shí)際地址,指定的地址可以是URI Template 模式
method:指定請(qǐng)求的method類型, GET、POST、PUT、DELETE等
consumes:指定處理請(qǐng)求的提交內(nèi)容類型(Content-Type),如application/json,text/html;
produces:指定返回的內(nèi)容類型,僅當(dāng)request請(qǐng)求頭中的(Accept)類型中包含該指定類型才
返回
1.15.@RequestParam
用在方法的參數(shù)前面。
@RequestParam String a =request.getParameter("a")
1.16.@PathVariable
路徑變量。參數(shù)與大括號(hào)里的名字一樣要相同。
RequestMapping("user/get/mac/{macAddress}") public String getByMacAddress(@PathVariable String macAddress){ //do something; }
1.17.@Profiles
Spring Profiles提供了一種隔離應(yīng)用程序配置的方式,并讓這些配置只能在特定的環(huán)境下生效。
任何@Component或@Configuration都能被@Profile標(biāo)記,從而限制加載它的時(shí)機(jī)。
@Configuration @Profile("prod") public class ProductionConfiguration { // ... }
1.18.@ConfigurationProperties
Spring Boot將嘗試校驗(yàn)外部的配置,默認(rèn)使用JSR-303(如果在classpath路徑中)。
你可以輕松的為你的@ConfigurationProperties類添加JSR-303 javax.validation約束注解:
@Component @ConfigurationProperties(prefix="connection") public class ConnectionSettings { @NotNull private InetAddress remoteAddress; // ... getters and setters }
全局異常處理
1.19.@ControllerAdvice
包含@Component??梢员粧呙璧?。
統(tǒng)一處理異常。
1.20.@ExceptionHandler(Exception.class)
用在方法上面表示遇到這個(gè)異常就執(zhí)行以下方法
關(guān)于更多SpringBoot定時(shí)器、緩存、Jpa、事務(wù)注解可參照大佬此文:SpringBoot注解
二、SpringClould
2.1.匯總
@Controller 控制層,里面有多個(gè)連接
@Qualifier 如果一個(gè)接口有多個(gè)實(shí)現(xiàn),那么注入時(shí)候加上唯一標(biāo)示
@Resource bean的注入,同Autowired 有相同的功能。
說(shuō)明:
共同點(diǎn):@Resource和@Autowired都可以作為注入屬性的修飾,在接口僅有單一實(shí)現(xiàn)類時(shí),兩個(gè)注解的修飾效果相同,可以互相替換,不影響使用。
不同點(diǎn):
@Resource是Java自己的注解,@Resource有兩個(gè)屬性是比較重要的,分是name和type;Spring將@Resource注解的name屬性解析為bean的名字,而type屬性則解析為bean的類型。所以如果使用name屬性,則使用byName的自動(dòng)注入策略,而使用type屬性時(shí)則使用byType自動(dòng)注入策略。如果既不指定name也不指定type屬性,這時(shí)將通過(guò)反射機(jī)制使用byName自動(dòng)注入策略。
@Autowired是spring的注解,是spring2.5版本引入的,Autowired只根據(jù)type進(jìn)行注入,不會(huì)去匹配name。如果涉及到type無(wú)法辨別注入對(duì)象時(shí),那需要依賴@Qualifier或@Primary注解一起來(lái)修飾。
@Component定義其它組件(比如訪問(wèn)外部服務(wù)的組件)
@ModelAttribute 一般用于controller層,唄注解的方法會(huì)在所以mapping執(zhí)行之前執(zhí)行,并且可以綁定參數(shù)到Model model里面。
@Transactional (readOnly=true)注解式事務(wù)
@TransactionalEventListener用于配置事務(wù)的回調(diào)方法,可以在事務(wù)提交前、提交后、完成后以及回滾后幾個(gè)階段接受回調(diào)事件。
@Value(“${}”)可以注入properties里面的配置項(xiàng)
@InitBinder 一般用于controller 可以將所以form 講所有傳遞進(jìn)來(lái)的string 進(jìn)行html編碼,防止xss攻擊,比如可以將字符串類型的日期轉(zhuǎn)換成date類型
@EnableCaching 注解自動(dòng)化配置合適的緩存管理器。
@EnableWebSecurity 注解開(kāi)啟spring security的功能,集成websercrityconfigureadapter。
@SringBootApplication相當(dāng)于@configuration,@EnableAutoConfiguation @ComponentScan三個(gè)注解合用。
@EnableDiscoveryclient 注冊(cè)應(yīng)用為Eureka客戶端應(yīng)用,以獲得服務(wù)發(fā)現(xiàn)的能力
@EnableAdminServer 使用admin監(jiān)控應(yīng)用。
@EnableEurekaClient配置本應(yīng)用將使用服務(wù)注冊(cè)和服務(wù)發(fā)現(xiàn),注意:注冊(cè)和發(fā)現(xiàn)用這個(gè)注解。
@EnableEurekaServer 啟動(dòng)一個(gè)服務(wù)注冊(cè)中心
@EnableHystrix表示啟動(dòng)斷路器,斷路器依賴于服務(wù)注冊(cè)和發(fā)現(xiàn)。
@HystrixCommand注解方法失敗后,系統(tǒng)將西東切換到fallbackMethod方法執(zhí)行。指定回調(diào)方法
@Comfiguration 相當(dāng)于傳統(tǒng)的xml配置文件
@Import 導(dǎo)入其他配置類
@ImportResource用來(lái) 加載xml配置文件
@FeignClient注解中的fallbank屬性指定回調(diào)類
@RestController 返回json字符串的數(shù)據(jù),直接可以編寫(xiě)RESTFul的接口;
@CrossOrigin 可以處理跨域請(qǐng)求,讓你能訪問(wèn)不是一個(gè)域的文件;
@ApiOperation 首先@ApiOperation注解不是Spring自帶的,它是是swagger里的注解@ApiOperation是用來(lái)構(gòu)建Api文檔的@ApiOperation(value = “接口說(shuō)明”, httpMethod = “接口請(qǐng)求方式”, response = “接口返回參數(shù)類型”, notes = “接口發(fā)布說(shuō)明”;
@RefreshScope 如果代碼中需要?jiǎng)討B(tài)刷新配置,在需要的類上加上該注解就行。但某些復(fù)雜的注入場(chǎng)景下,這個(gè)注解使用不當(dāng),配置可能仍然不動(dòng)態(tài)刷新;
@FeignClient springboot調(diào)用外部接口:聲明接口之后,在代碼中通過(guò)@Resource注入之后即可使用。@FeignClient標(biāo)簽的常用屬性如下:name:指定FeignClient的名稱,如果項(xiàng)目使用了Ribbon,name屬性會(huì)作為微服務(wù)的名稱,用于服務(wù)發(fā)現(xiàn)
url: url一般用于調(diào)試,可以手動(dòng)指定@FeignClient調(diào)用的地址decode404:當(dāng)發(fā)生http 404錯(cuò)誤時(shí),如果該字段位true,會(huì)調(diào)用decoder進(jìn)行解碼,否則拋出FeignException
configuration: Feign配置類,可以自定義Feign的Encoder、Decoder、LogLevel、Contractfallback: 定義容錯(cuò)的處理類,當(dāng)調(diào)用遠(yuǎn)程接口失敗或超時(shí)時(shí),會(huì)調(diào)用對(duì)應(yīng)接口的容錯(cuò)邏輯,fallback指定的類必須實(shí)現(xiàn)@FeignClient標(biāo)記的接口
fallbackFactory: 工廠類,用于生成fallback類示例,通過(guò)這個(gè)屬性我們可以實(shí)現(xiàn)每個(gè)接口通用的容錯(cuò)邏輯,減少重復(fù)的代碼path: 定義當(dāng)前FeignClient的統(tǒng)一前綴
@EnableFeignClients 開(kāi)啟Spring Cloud Feign的支持
@EnableCircuitBreaker 開(kāi)啟斷路器功能
@LoadBalanced 開(kāi)啟客戶端負(fù)載均衡
@WebAppConfiguration 開(kāi)啟Web 應(yīng)用的配置,用于模擬ServletContext
@RibbonClient,這個(gè)注解用來(lái)為負(fù)載均衡客戶端做一些自定義的配置,可以進(jìn)一步配置或自定義從哪里獲取服務(wù)端列表、負(fù)載均衡策略、Ping也就是服務(wù)鑒活策略等等
三、Lombok常用注解
3.1.匯總
@Data 注解在類上;提供類所有屬性的 getting 和 setting 方法,此外還提供了equals、canEqual、hashCode、toString 方法
@Setter :注解在屬性上;為屬性提供 setting 方法
@Setter :注解在屬性上;為屬性提供 getting 方法
@Log4j :注解在類上;為類提供一個(gè) 屬性名為log 的 log4j 日志對(duì)象
@NoArgsConstructor :注解在類上;為類提供一個(gè)無(wú)參的構(gòu)造方法
@AllArgsConstructor :注解在類上;為類提供一個(gè)全參的構(gòu)造方法
@Cleanup : 可以關(guān)閉流
@Builder : 被注解的類加個(gè)構(gòu)造者模式
@Synchronized : 加個(gè)同步鎖
@SneakyThrows : 等同于try/catch 捕獲異常
@NonNull : 如果給參數(shù)加個(gè)這個(gè)注解 參數(shù)為null會(huì)拋出空指針異常
@Value : 注解和@Data類似,區(qū)別在于它會(huì)把所有成員變量默認(rèn)定義為private final修飾,并且不會(huì)生成set方法。
總結(jié)
本篇文章就到這里了,希望能給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
SSM項(xiàng)目實(shí)現(xiàn)短信驗(yàn)證碼登錄功能的示例代碼
這篇文章主要為大家分享了在SSM項(xiàng)目中實(shí)現(xiàn)短信驗(yàn)證碼登錄功能的示例代碼,文中的實(shí)現(xiàn)步驟講解詳細(xì),感興趣的小伙伴可以跟隨小編一起動(dòng)手嘗試一下2022-05-05Java動(dòng)態(tài)驗(yàn)證碼單線設(shè)計(jì)的兩種方法
這篇文章主要介紹了Java動(dòng)態(tài)驗(yàn)證碼單線設(shè)計(jì)的兩種方法,需要的朋友可以參考下2018-07-07淺談java Iterator.remove()方法的用法(詳解)
下面小編就為大家?guī)?lái)一篇淺談java Iterator.remove()方法的用法(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01java?-jar命令及SpringBoot通過(guò)java?-jav啟動(dòng)項(xiàng)目的過(guò)程
本篇文章將為大家講述關(guān)于 SpringBoot 項(xiàng)目工程完成后,是如何通過(guò) java-jar 命令來(lái)啟動(dòng)的,以及介紹 java-jar 命令的詳細(xì)內(nèi)容,對(duì)SpringBoot java?-jav啟動(dòng)過(guò)程感興趣的朋友跟隨小編一起看看吧2023-05-05SpringCloud Stream消息驅(qū)動(dòng)實(shí)例詳解
這篇文章主要介紹了SpringCloud Stream消息驅(qū)動(dòng)的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03Java使用阿里云接口進(jìn)行身份證實(shí)名認(rèn)證的示例實(shí)現(xiàn)
這篇文章主要介紹了使用阿里云接口進(jìn)行身份證實(shí)名認(rèn)證的示例實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07