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.


