Spring Boot 二十個註解 占據無力擁有的東西是一種悲哀。 Cold on the outside passionate on the insede. 背景:Spring Boot 註解的強大毋庸置疑,使用其註解可以大量減少XML 等複雜的配置文件,令Java 代碼更純,開發更簡單高效,記下 ...
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.