Spring Boot 二十個註解

  • 2019 年 10 月 14 日
  • 筆記

Spring Boot 二十個註解

 

佔據無力擁有的東西是一種悲哀。

  Cold on the outside passionate on the insede.

 

背景:Spring Boot 註解的強大毋庸置疑,使用其註解可以大量減少XML 等複雜的配置文件,令Java 程式碼更純,開發更簡單高效,記下一些常用的Spring Boot Annotations,不包括那些在Spring Boot 使用的JPA 和MyBatis 註解。

一、@SpringBootApplication

      @SpringBootApplication 註解用於聲明自動配置,即讓Spring Boot 自動為程式進行必要的配置;@SpringBootApplication 註解配置等同於@Configuration、@EnableAutoConfiguration 和@ComponentScan 三個註解的配置。

 1 import org.springframework.boot.SpringApplication;   2 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;   3 import org.springframework.boot.autoconfigure.SpringBootApplication;   4 import org.springframework.context.annotation.ComponentScan;   5 import org.springframework.context.annotation.Configuration;   6   7 @SpringBootApplication   8 /*@Configuration  三者只和等同於 @SpringBootApplication 註解進行自動配置   9 @EnableAutoConfiguration  10 @ComponentScan*/  11 public class JzxyApplication {  12  13     public static void main(String[] args) {  14         SpringApplication.run(JzxyApplication.class, args);  15  16     }  17  18 }

二、@Contronller

      @Contronller 註解用於定義該類屬於控制器類,因為在Sping Boot 項目中是由控制器負責將用戶請求的URL 轉發到對應的服務介面(Service 服務層),So使用其是必不可少。

 1 /**   2  * 定義控制器類 @Controller   3  */   4 @Controller   5 @RequestMapping("/demon/linux")   6 public class LinuxUsersController {   7   8     @RequestMapping("/add/host")   9     public Map getLinuxConn(@RequestBody List<LinuxConnEntity> list) {  10         Map resultMap = null;  11         return list == null  12                 ? setResult(resultMap, Constant.ZERO, Constant.REQUEST_NULL_MSG)  13                 : linuxUsersServiceImpl.createLinuxConn(list);  14  15     }

三、@ResponseBody

      @ResponseBody 註解表示該方法的返回結果直接寫入HTTP 的Response Body 中,該註解一般在非同步獲取數據時使用,用於構建RESTful 的API;另外,在使用@RequestMapping 註解後返回值通常會解析為路徑跳轉,而在加上了@ResponseBody 註解後,返回結果則不會被解析為路徑而是直接寫入HTTP Response Body 中。

1 /**  2      * 非同步獲取json 數據,加上@responsebody 註解後,會直接返回json 數據  3      */  4     @ResponseBody  5     @RequestMapping("/responsebody")  6     public LinuxUserEntity testOne(LinuxUserEntity linuxUserEntity) {  7         return linuxUsersServiceImpl.test();  8         9     }

四、@RestController

@RestController 註解用於標註控制層組件,其是@ResponseBody 和@Contronller 兩個註解的集合。

 1 /**   2  * @RestController 等價於@Controller 和 @ResponseBody 兩個註解的集合   3  */   4 @RestController   5 @RequestMapping("/responsebody/linux")   6 public class LinuxUsersController {   7   8     @RequestMapping("/responsebody")   9     public LinuxUserEntity testOne(LinuxUserEntity linuxUserEntity) {  10         return linuxUsersServiceImpl.test();  11         12     }

五、@RequestMapping

@RequestMapping 是提供路由資訊的註解,其是負責URL 到Controller 中的具體函數的映射;此外,該註解後的括弧內經常會使用如下六個屬性:

1. param:指定請求request 中必須包含某些參數,否則不處理該方法;

2. header:指定請求request 中必須包含某些指定的header 值,否則不處理該方法;

3. value:指定請求的實際地址;

4. method:指定請求的方法method 類型,通常設計為RESTful 風格的GET、POST、PUT 和DELETE;

5. consumes:指定處理請求提交內容的具體類型(即Content-Type),如applicatin/json 和text/html 等類型格式;

6: produces:指定返回的內容類型,設置該屬性後僅當request 請求頭中的Accept 類型中包含該制定類型時才會返回,需謹慎。

1 /**  2      * @RequestMapping 提供路由資訊的註解  3      */  4     @RequestMapping("/responsebody")  5     public LinuxUserEntity testOne(LinuxUserEntity linuxUserEntity) {  6         return linuxUsersServiceImpl.test();  7     }

六、@EnableAutoConfiguration

      @EnableAutoConfiguration 是Spring Boot 自動配置註解,其會根據項目中添加的依賴自動配置Spring 應用;比如Spring Boot 自動配置內嵌tomcat 的埠為8080;還有自動載入應用程式所需的所有Bean,這依賴於Spring Boot 在類路徑中的查找結果,就比如你在classpath 下存在HSQLDB,並且沒有手動配置任何資料庫連接Bean,那麼@EnableAutoConfiguration 註解就會自動配置一個記憶體模型(in-memory)資料庫。

七、@ComponentScan

      @ComponentScan 註解表示該類會自動發現掃描組件,若掃描到包含@Component、@Controller 和@Service 等註解的類,則會將其註冊為Bean,並且可以自動收集所有的Spring 組件,包括有@Configuration 註解標註的類;開發中經常使用@ComponentScan 註解搜索Beans,並結合@Autowired 註解將Beans 注入,若沒有進行配置,則Spring Boot 只會掃描SpringBootApplication 啟動類所在包下及其子包下的使用了@Service、@Repository 等註解的類。

八、@Configuration

      @Configuration 註解作用類似於傳統的xml 配置文件;例如,有第三方庫需要用到xml 文件,則可以通過添加@Configuration 註解表示該類作為項目的配置主類,然後使用@ImportResource 註解載入xml 配置文件內容。

九、@Import

@Import 註解作用是導入其它配置類。

十、@ImportResource

@ImportResource 註解作用是載入xml 配置文件。

十一、@Autowired

      @Autowired 註解的作用是自動導入依賴的Bean;即把配置好的Bean 拿來用,完成屬性、方法的組裝,它可以對類成員變數、方法及構造函數進行標註,完成自動裝配的工作;並且當加上標籤(required=false)時,就算找不到bean 也不報錯,允許注入為空。

十二、@Service

@Service 註解的作用是標誌某類為Service 層,是Service 服務層組件註解。

十三、@Repository

      @Repository 註解作用是標誌某類為數據層,其可用於確保DAO 層或者Repositories 能正常轉譯;當@Repository 註解修飾DAO 或者repositories 類時會被ComponentScan 發現並配置。

十四、@Bean

      @Bean 註解相當於XML 配置文件中使用的<bean>標籤,初始化的時候創建對象,並交由IOC 容器管理;需要注意的是@Bean 註解是放在方法的上面,而不是類,意思是產生一個bean,並交給spring 管理。

十五、@Value

@Value 註解作用是注入Spring Boot 配置文件application.properties,即獲取application.properties 配置文件中屬性的值。

1 @Value(value = "#{VEHIVLE_TOPIC}")  2     private String VEHIVLE_TOPIC;

十六、@inject

@inject 註解作用與@Autowired 相同,不同的是其沒有require 屬性,強制要求注入不能為空。

十七、@Component

@Component 註解泛指組件,即當組件不方便歸類時,可以使用該註解進行標註歸類。

十八、@Qualifier

      @Qualifier 註解用於當有多個同一類型的Bean 時,通過@Qualifier(“name”) 根據名字來指定注入的Bean;其需要配合@Autowired 使用,根據名字進行注入,進行更細粒度的控制如何選擇要注入的Bean。

十九、@Resouce

      @Resouce 註解的作用與@Autowired 相似,都是自動注入依賴的Bean;不同的是@Resource(name=”name”,type=”type”) 多了括弧內的屬性,當沒有括弧內內容的話,默認byName。

二十、@PathVariable

@PathVariable 註解的作用是獲取路徑變數。

 1 /**   2      * @RequestMapping 獲取路徑變數   3      */   4     @RequestMapping("/ioc/get/{address}")   5     public String testOne(@PathVariable String address ) {   6         /**   7          * 獲取得到路徑中address 的值   8          */   9         return address;  10     }

 

 

 

佔據無力擁有的東西是一種悲哀。

  Cold on the outside passionate on the insede.