什么是注解?
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方法,
想進一步學習請參考如下檔案:
官方檔案: https://projectlombok.org/features/all
lombok注解介紹: http://blog.csdn.net/sunsfan/article/details/53542374
Lombok介紹及使用方法: http://www.cnblogs.com/holten/p/5729226.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/293348.html
標籤:java
