全面匯總SpringBoot和SpringClould常用註解

什麼是註解?

Java註解是附加在代碼中的一些元信息,用於一些工具在編譯、運行時進行解析和使用,起到說明、配置的功能
註解本質上繼承 Annotation 接口,我們可以通過反射獲取註解的相關信息,從而做些邏輯操作 springboot裡⾯大量使用瞭註解,

@Controller 、@RestController 、@Service、 @Autowire 等

一、SpringBoot註解

1.1.@SpringBootApplication

包含@Configuration、@EnableAutoConfiguration、@ComponentScan

通常用在主類上。

1.2.@Repository

用於標註數據訪問組件,即DAO組件。

1.3.@Service

用於標註業務層組件。

1.4.@RestController

用於標註控制層組件(如struts中的action),包含@Controller和@ResponseBody。

1.5.@ResponseBody

表示該方法的返回結果直接寫入HTTP response body中

一般在異步獲取數據時使用,在使用@RequestMapping後,返回值通常解析為跳轉路徑,加上@responsebody後返回結果不會被解析為跳轉路徑,而是直接寫入HTTP response body中。比如異步獲取json數據,加上@responsebody後,會直接返回json數據。

1.6.@Component

泛指組件,當組件不好歸類的時候,我們可以使用這個註解進行標註。

1.7.@ComponentScan

組件掃描。個人理解相當於context:component-scan,如果掃描到有@Component @Controller @Service等這些註解的類,則把這些類註冊為bean。

1.8.@Configuration

指出該類是 Bean 配置的信息源,相當於XML中的,一般加在主類上。

1.9.@Bean

相當於XML中的,放在方法的上面,而不是類,意思是產生一個bean,並交給spring管理。

1.10.@EnableAutoConfiguration

讓 Spring Boot 根據應用所聲明的依賴來對 Spring 框架進行自動配置,一般加在主類上。

1.11.@AutoWired

byType方式。把配置好的Bean拿來用,完成屬性、方法的組裝,它可以對類成員變量、方法及構造函數進行標註,完成自動裝配的工作。
當加上(required=false)時,就算找不到bean也不報錯。

1.12.@Qualifier

當有多個同一類型的Bean時,可以用@Qualifier(“name”)來指定。與@Autowired配合使用

1.13.@Resource(name=“name”,type=“type”)

沒有括號內內容的話,默認byName。與@Autowired幹類似的事。

1.14.@RequestMapping

RequestMapping是一個用來處理請求地址映射的註解,可用於類或方法上。用於類上,表示類中的所有響應請求的方法都是以該地址作為父路徑。

該註解有六個屬性:

params:指定request中必須包含某些參數值是,才讓該方法處理。
headers:指定request中必須包含某些指定的header值,才能讓該方法處理請求。
value:指定請求的實際地址,指定的地址可以是URI Template 模式
method:指定請求的method類型, GET、POST、PUT、DELETE等
consumes:指定處理請求的提交內容類型(Content-Type),如application/json,text/html;
produces:指定返回的內容類型,僅當request請求頭中的(Accept)類型中包含該指定類型才
返回

1.15.@RequestParam

用在方法的參數前面。

@RequestParam String a =request.getParameter(“a”)

1.16.@PathVariable

路徑變量。參數與大括號裡的名字一樣要相同。

RequestMapping("user/get/mac/{macAddress}")
public String getByMacAddress(@PathVariable String macAddress){
  //do something;
}

1.17.@Profiles

Spring Profiles提供瞭一種隔離應用程序配置的方式,並讓這些配置隻能在特定的環境下生效。

任何@Component或@Configuration都能被@Profile標記,從而限制加載它的時機。

@Configuration
@Profile("prod")
public class ProductionConfiguration {
    // ...
}

1.18.@ConfigurationProperties

Spring Boot將嘗試校驗外部的配置,默認使用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。可以被掃描到。

統一處理異常。

1.20.@ExceptionHandler(Exception.class)

用在方法上面表示遇到這個異常就執行以下方法

關於更多SpringBoot定時器、緩存、Jpa、事務註解可參照大佬此文:SpringBoot註解

二、SpringClould

2.1.匯總

@Controller 控制層,裡面有多個連接
@Qualifier 如果一個接口有多個實現,那麼註入時候加上唯一標示
@Resource bean的註入,同Autowired 有相同的功能。
說明:
共同點:@Resource和@Autowired都可以作為註入屬性的修飾,在接口僅有單一實現類時,兩個註解的修飾效果相同,可以互相替換,不影響使用。
不同點:
@Resource是Java自己的註解,@Resource有兩個屬性是比較重要的,分是name和type;Spring將@Resource註解的name屬性解析為bean的名字,而type屬性則解析為bean的類型。所以如果使用name屬性,則使用byName的自動註入策略,而使用type屬性時則使用byType自動註入策略。如果既不指定name也不指定type屬性,這時將通過反射機制使用byName自動註入策略。
@Autowired是spring的註解,是spring2.5版本引入的,Autowired隻根據type進行註入,不會去匹配name。如果涉及到type無法辨別註入對象時,那需要依賴@Qualifier或@Primary註解一起來修飾。
@Component定義其它組件(比如訪問外部服務的組件)
@ModelAttribute 一般用於controller層,唄註解的方法會在所以mapping執行之前執行,並且可以綁定參數到Model model裡面。
@Transactional (readOnly=true)註解式事務
@TransactionalEventListener用於配置事務的回調方法,可以在事務提交前、提交後、完成後以及回滾後幾個階段接受回調事件。
@Value(“${}”)可以註入properties裡面的配置項
@InitBinder 一般用於controller 可以將所以form 講所有傳遞進來的string 進行html編碼,防止xss攻擊,比如可以將字符串類型的日期轉換成date類型
@EnableCaching 註解自動化配置合適的緩存管理器。
@EnableWebSecurity 註解開啟spring security的功能,集成websercrityconfigureadapter。
@SringBootApplication相當於@configuration,@EnableAutoConfiguation @ComponentScan三個註解合用。
@EnableDiscoveryclient 註冊應用為Eureka客戶端應用,以獲得服務發現的能力
@EnableAdminServer 使用admin監控應用。
@EnableEurekaClient配置本應用將使用服務註冊和服務發現,註意:註冊和發現用這個註解。
@EnableEurekaServer 啟動一個服務註冊中心
@EnableHystrix表示啟動斷路器,斷路器依賴於服務註冊和發現。
@HystrixCommand註解方法失敗後,系統將西東切換到fallbackMethod方法執行。指定回調方法
@Comfiguration 相當於傳統的xml配置文件
@Import 導入其他配置類
@ImportResource用來 加載xml配置文件
@FeignClient註解中的fallbank屬性指定回調類
@RestController 返回json字符串的數據,直接可以編寫RESTFul的接口;
@CrossOrigin 可以處理跨域請求,讓你能訪問不是一個域的文件;
@ApiOperation 首先@ApiOperation註解不是Spring自帶的,它是是swagger裡的註解@ApiOperation是用來構建Api文檔的@ApiOperation(value = “接口說明”, httpMethod = “接口請求方式”, response = “接口返回參數類型”, notes = “接口發佈說明”;
@RefreshScope 如果代碼中需要動態刷新配置,在需要的類上加上該註解就行。但某些復雜的註入場景下,這個註解使用不當,配置可能仍然不動態刷新;
@FeignClient springboot調用外部接口:聲明接口之後,在代碼中通過@Resource註入之後即可使用。@FeignClient標簽的常用屬性如下:name:指定FeignClient的名稱,如果項目使用瞭Ribbon,name屬性會作為微服務的名稱,用於服務發現
url: url一般用於調試,可以手動指定@FeignClient調用的地址decode404:當發生http 404錯誤時,如果該字段位true,會調用decoder進行解碼,否則拋出FeignException
configuration: Feign配置類,可以自定義Feign的Encoder、Decoder、LogLevel、Contractfallback: 定義容錯的處理類,當調用遠程接口失敗或超時時,會調用對應接口的容錯邏輯,fallback指定的類必須實現@FeignClient標記的接口
fallbackFactory: 工廠類,用於生成fallback類示例,通過這個屬性我們可以實現每個接口通用的容錯邏輯,減少重復的代碼path: 定義當前FeignClient的統一前綴
@EnableFeignClients 開啟Spring Cloud Feign的支持
@EnableCircuitBreaker 開啟斷路器功能
@LoadBalanced 開啟客戶端負載均衡
@WebAppConfiguration 開啟Web 應用的配置,用於模擬ServletContext
@RibbonClient,這個註解用來為負載均衡客戶端做一些自定義的配置,可以進一步配置或自定義從哪裡獲取服務端列表、負載均衡策略、Ping也就是服務鑒活策略等等

三、Lombok常用註解

在這裡插入圖片描述

 

3.1.匯總

@Data 註解在類上;提供類所有屬性的 getting 和 setting 方法,此外還提供瞭equals、canEqual、hashCode、toString 方法
@Setter :註解在屬性上;為屬性提供 setting 方法
@Setter :註解在屬性上;為屬性提供 getting 方法
@Log4j :註解在類上;為類提供一個 屬性名為log 的 log4j 日志對象
@NoArgsConstructor :註解在類上;為類提供一個無參的構造方法
@AllArgsConstructor :註解在類上;為類提供一個全參的構造方法
@Cleanup : 可以關閉流
@Builder : 被註解的類加個構造者模式
@Synchronized : 加個同步鎖
@SneakyThrows : 等同於try/catch 捕獲異常
@NonNull : 如果給參數加個這個註解 參數為null會拋出空指針異常
@Value : 註解和@Data類似,區別在於它會把所有成員變量默認定義為private final修飾,並且不會生成set方法。

總結

本篇文章就到這裡瞭,希望能給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!

推薦閱讀: