@Autowired
自動導入依賴的 Bean。byType方式。把配置好的 Bean拿來用,完成屬性、方法的組裝,它可以對類成員變量、方法及構造函數進行標注,完成自動裝配的工作
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class CustomerController{
@Autowired
private CustomerService = customerService;
}
@Api--Swagger
該注解將一個Controller(Class)標注為一個 swagger 資源(API)。在默認情況下,Swagger-Core 只會掃描解析具有 @Api 注解的類,而會自動忽略其他類別資源(JAX-RS endpoints,Servlets等等)的注解。該注解包含以下幾個重要屬性:
- tags API分組標簽。具有相同標簽的API將會被歸並在一組內展示。
- value 如果tags沒有定義,value 將作為 Api 的 tags 使用
- description API 的詳細描述,在 1.5.X 版本之后不再使用,但實際發現在2.0.0版本中仍然可以使用
@RestController
@RequestMapping("/api/v1/cps")
@Api(value = "CpsDeployBatch", description = "Cps批量回滾")
public class CpsBatchRollbackController {
...
}
@ApiOperation--Swagger
@ApiOperation(value = "從xxx下載包到", notes = "")
用在方法上,在指定的(路由)路徑上,對一個操作或HTTP方法進行描述
- value 對操作的簡單說明,長度為120個字母,60個漢字。
- notes 對操作的詳細說明,會在接口的
Implementation Notes
下顯示接口的詳細說明
@Bean
@Bean
是方法級(不是類)注釋,是XML元素的直接模擬。意思是產生一個 Bean
,並交給 Spring
管理
@ComponentScan
組件掃描,可自動發現和裝配一些 Bean
@Component
可配合 CommandLineRunner
使用,在程序啟動后執行一些基礎任務。
Controller
@Controller
處理 Http 請求,用於定義控制器類,在spring 項目中由控制器負責將用戶發來的URL請求轉發到對應的服務接口(service層)。@RestController
Spring 框架4版本之后出來的注解,之前版本返回json
數據需要@ResponseBody
配合@Controller
,項目中就是采用的該注解,沒有采用上面的;
@Data
使用 Lombok 之后,將由其來自動幫你實現代碼生成,比如一些 Getter/Setter 等方法。使用步驟如下:
- IDEA 安裝插鍵
lombok
; - pom 依賴
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
</dependency>
- 在類上使用
@Data
注解,那么該類你就可以省略一些變量的 Getter/Setter 方法的代碼了;
lombok 插鍵使用:
@EnableAutoConfiguration
Spring Boot 自動配置(auto-configuration
):嘗試根據你添加的jar依賴自動配置你的Spring應用。例如,如果你的 classpath下存在 HSQLDB,並且你沒有手動配置任何數據庫連接 beans,那么我們將自動配置一個內存型(in-memory
)數據庫”。你可以將 @EnableAutoConfiguration
或者 @SpringBootApplication
注解添加到一個@Configuration
類上來選擇自動配置。如果發現應用了你不想要的特定自動配置類,你可以使用 @EnableAutoConfiguration
注解的排除屬性來禁用它們。
@override
@Override
是 Java5 的元數據,自動加上去的一個標志,告訴你說下面這個方法是從父類/接口 繼承過來的,需要你重寫一次,這樣就可以方便你閱讀,也不怕會忘記。
@Override
是偽代碼,表示重寫(當然不寫也可以),不過寫上有如下好處:
- 可以當注釋用,方便閱讀
- 編譯器可以給你驗證@Override下面的方法名是否是你父類中所有的,如果沒有則報錯
參考:
@RequestMapping 配置 URL 映射關系
@RequestMapping
提供路由信息,負責 URL 到 Controller 中的具體函數的映射。
它是一個用來處理請求地址映射的注解,可用於類或方法上。用於類上,表示類中的所有響應請求的方法都是以該地址作為父路徑。
該注解有六個屬性:
- params:指定request中必須包含某些參數值是,才讓該方法處理。
- headers:指定request中必須包含某些指定的header值,才能讓該方法處理請求。
- value:指定請求的實際地址,指定的地址可以是URI Template 模式,別名 path
- method:指定請求的method類型, GET、POST、PUT、DELETE等
- consumes:指定處理請求的提交內容類型(Content-Type),如application/json,text/html;
- produces:指定返回的內容類型,僅當request請求頭中的(Accept)類型中包含該指定類型才返回
在同一個注解中成對使用即可,比如示例代碼中,value和path就是互為別名。但是要注意一點,@AliasFor標簽有一些使用限制,但是這應該能想到的,比如要求互為別名的屬性屬性值類型,默認值,都是相同的,互為別名的注解必須成對出現,比如value屬性添加了@AliasFor("path"),那么path屬性就必須添加@AliasFor("value"),另外還有一點,互為別名的屬性必須定義默認值。
@RequestMapping 的默認屬性為 value,所以下面兩種方法是等價的:
@RequestMapping(value="/example")
@RequestMapping("/example")
value屬性還支持通配符模式:
-
?:匹配單個字符
-
*:匹配多個字符,單層路徑匹配
-
**:匹配多層路徑
-
@GetMapping
是一個組合注解,是@RequestMapping(method = RequestMethod.GET)
的縮寫。該注解將HTTP Get
映射到 特定的處理方法上。
@GetMapping(value = "/helloGet")
public String helloGet() {
return "helloGet";
}
@RequestMapping(value = "/helloGet1",method= RequestMethod.GET)
public String helloGet1() {
return "helloGet1";
}
@PostMapping
是一個組合注解,是@RequestMapping(method = RequestMethod.POST)
的縮寫。該注解將HTTP Post
映射到 特定的處理方法上。
@PostMapping(value = "/helloPost")
public String helloPost() {
return "helloPost";
}
@RequestMapping(value = "/helloPost1",method= RequestMethod.POST)
public String helloPost1() {
return "helloPost1";
}
@PathVariable 獲取url中的數據
@RequestMapping("/users/{username}")
public String userProfile(@PathVariable String username){
return "user:" + username;
}
- 這里
{username}
就是我們定義的變量規則,username
是變量的名字; - 需要注意的是,在默認情況下,變量中不可以包含 URL 的分隔符 /,例如路由不能匹配
/users/tianmaying/ricky
,即使你認為tianmaying/ricky
是一個存在的用戶名; - 在默認的情況下,Spring 會對
@PathVariable
注解的變量進行自動賦值,當然你也可以指定@PathVariable
使用哪一個 URL 中的變量:
@RequestMapping("/users/{name}")
public String userProfile(@PathVariable("name") String username){
return "user:" + username;
}
- 定義多個 URL 變量
@PathVariable
注解的參數可以是一些基本的簡單類型:int,long,Date,String
等,Spring 能根據 URL 變量的具體值以及函數參數的類型來進行轉換,例如 /user/testUserName/intParam/5
,會將 testUserName
的值賦給 username
,而 5
賦值給 int
變量 num
:
@RequestMapping("/user/{username}/intParam/{num}")
public String getUserInfo(@PathVariable String username , @PathVariable int num){
return "user: " + username + ";intParam:" + num;
}
@Qualifier
當有多個同一類型的 Bean 時,可以用 @Qualifier(“name”)
來指定。與 @Autowired
配合使用。@Qualifier
限定描述符除了能根據名字進行注入,但能進行更細粒度的控制如何選擇候選者,具體使用方式如下:
@Autowired
@Qualifier(value = “demoInfoService”)
private DemoInfoService demoInfoService;
@RequestParam 獲取請求參數的值
@RequestMapping("/user/test")
public String getUserName1(@RequestParam("userName") String userName) {
return "userName = " + userName;
}
對應的 URL 會組成類似這樣的:**/user/test?userName=michael
一旦我們在方法中定義了 @RequestParam
變量,如果訪問的 URL 中不帶有相應的參數,就會拋出異常——這是顯然的,Spring嘗試幫我們進行綁定,然而沒有成功。
但有的時候,參數確實不一定永遠都存在,這是我們可以通過定義 required
屬性,當然,在參數不存在的情況下,可以給變量定義一個默認值:
@RequestMapping("/user/test")
public String getUserName1(@RequestParam(name="userName",required = false, defaultValue="admin") String userName) {
return "userName = " + userName;
}
用在方法的參數前面,來映射請求參數,在處理方法入參處使用 @RequestParam 可以把請求參數傳遞給請求方法。這個注解屬於 Spring。
- value,對應 url 提交的
?id=xx
中的 id,參數名 - defaultValue,該參數的默認值,當 url 中 id 值沒有傳輸時將使用這個參數進行賦值
- required,是否必須。默認為
true
, 表示請求參數中必須包含對應的參數,若不存在,將拋出異常
Ref:
@SpringBootApplication
申明讓 Spring Boot自動給程序進行必要的配置,這個配置等同於:@Configuration
,@EnableAutoConfiguration
和 @ComponentScan
三個配置
@SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@Value
Spring @Value
注釋用於為變量和方法參數指定默認值。我們可以使用 @Value
注釋來讀取 Spring
環境變量以及系統變量 。
注意:當要給靜態變量注入值的時候,若是在靜態變量聲明之上直接添加 @Value()
注解是無效的
總結
聲明 bean 的注解
@Component
組件,沒有明確的角色@Service
在業務邏輯層使用(service 層)@Repository
在數據訪問層使用(dao 層)@Controller
在展現層使用,控制器的聲明(controller 層)
注入bean的注解
@Autowired
:由Spring提供@Inject
:由JSR-330提供@Resource
:由JSR-250提供
基礎知識
- Spring Bean是什么?
- Spring Boot常用注解(二) - 注入Bean的注解
- Spring Boot常用注解(一) - 聲明Bean的注解
- 輕松理解 Java開發中的依賴注入(DI)和控制反轉(IOC)
參考
Spring 注解
- 掘金-Spring之RequestBody的使用姿勢小結
- 博客園-@requestBody注解的使用
- Java 必須掌握的 20+ 種 Spring 常用注解 歸納了哪些注解是聲明 bean 的,哪些是注入 bean 的
- SpringBoot學習 ICode9 網站,一篇文章總結了 Spring Boot 的入門知識
- CSDN-Spring Boot各種注解詳解
Swagger 注解