SpringBoot中常用注解的使用合集
Spring Boot 框架提供了許多注解來簡化配置和開發(fā)過程。
什么是注解式編程
注解 annotation 用來定義一個類、屬性和一些方法,以便程序能夠被編譯處理。
它相當于一個說明文件,告訴應(yīng)用程序某個類或者屬性是什么,要怎么處理。注解可以用于標注包、類、方法和變量等。
注解式編程是一種基于注釋的程序編碼風格。它使用特定的注釋來配置和定義應(yīng)用程序的行為,而不需要顯式編寫大量的配置代碼。
比如:
@RestController
public class Jimmy {
@RequestMapping("/jimmy")
public String sayHi() {
return "Hello, Jimmy."
}
}常用注解
注解分不同場景使用,使用在類名上,使用在方法上等。
使用在類名上的注解
| 注解 | 使用位置 | 說明 |
|---|---|---|
| @RestController | 類名上 | 作用相當于 @ResponseBody 加 @Controller |
| @Controller | 類名上 | 聲明此類是一個 SpringMVC Controller 對象 |
| @Service | 類名上 | 聲明一個業(yè)務(wù)處理類(實現(xiàn)非接口類) |
| @Repository | 類名上 | 聲明數(shù)據(jù)庫訪問類(實現(xiàn)非接口類) |
| @Component | 類名上 | 代表其是 Spring 管理類,常用在無法用 @Service、@Repository 描述的 Spring 管理類上,相當于通用的注釋 |
| @Configuration | 類名上 | 聲明此類是一個配置類,常與 @Bean 配合使用 |
| @Resource | 類名上 | 默認按 byName 自動注入 |
| @Autowired | 類名上、屬性或構(gòu)造函數(shù)參數(shù)上 | 默認按 byType 自動注入 |
| @RequestMapping | 類名或方法上 | 用在類上,則表示所有響應(yīng)請求的方法都是以該地址作為父路徑的 |
| @Transactional | 類名或方法上 | 用于處理事務(wù) |
| @Qualifier | 類名或?qū)傩陨?/td> | 為 Bean 指定名稱,隨后再通過名稱引用 Bean |
下面我們一個個來解析:
@RestController
用于返回 JSON 、XML 等數(shù)據(jù),但是不能返回 HTML 頁面。相當于 @ResponseBody 和 @Controller 合在一起的作用。
JSON - JavaScript Object Notation, JS 對象標記; XML - eXtensible Markup Language;HTML - HyperText Markup Language
@RestController
public class Hello {
@RequestMapping("/jimmy")
public String sayHi() {
return "Hello, Jimmy.";
}
}@Controller
用于標注控制器層,在 MVC 開發(fā)模式中代表 C(控制器)。
上面 @RestController 的例子,等價于下面的寫法:
@Controller
public class Hello {
@RequestMapping("/jimmy")
@ResponseBody
public String sayHi() {
return "Hello, jimmy";
}
}@Service
用于聲明一個業(yè)務(wù)處理類(實現(xiàn)非接口類),用于標注服務(wù)層,處理業(yè)務(wù)邏輯。
@Service
public class ArticleServiceImpl implements ArticleService {
@Autowired
private ArticleRepository articleRepository;
@Override
public Article findArticleById(long id) {
return articleRepository.findById(id);
}
}@Repository
用于標注數(shù)據(jù)訪問層。
@Repository
public class UserRepository {
@Autowired
private JdbcTemplate jdbcTemplate;
public User getUserById(long id) {
String sql = "SELECT * FROM users WHERE is = ?";
return jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(User.class));
}
}@Component
@Component 是一個通用的注釋,用于標識一個類是一個組件。使用 @Component 注釋的類會被框架自動掃描,并創(chuàng)建為一個 Bean,可以在應(yīng)用程序的其他部分進行注入和使用。
@Component
public class EmailService {
public void sendEmail(String recipient, String message) {
// Send email logic
}
}@Compoent 沒有特定的業(yè)務(wù)含義。如果在應(yīng)用程序中有更具體的組件類型,如數(shù)據(jù)訪問組件(@Repository),服務(wù)組件(@Service),控制器組件(@Controller)等,推薦使用更加具體的注釋以更好表達其用途和語義。
@Resource
用來標記和注入依賴。它可以用于注入其他 Spring 管理的 Bean、JNDI 資源、以及其他的依賴項。
@Service
public class UserService {
@Resource
private UserRepository userRepository;
}@Configuration
用于標識一個類是配置類。配置類在應(yīng)用程序中扮演著重要的角色,用于定義和組織應(yīng)用程序的一些配置。它作為 Bean 的載體。
@Configuration
public class AppConfig {
@Bean
public DataSource dataSource() {
// create and setting datasource object
DataSource dataSource = new DataSource();
dataSource.setUrl("jdbc:mysql://localhost:3306/mydb");
dataSource.setUsername("username");
dataSource.setPassword("password");
return dataSource;
}
}@Autowired
表示被修飾的類需要注入對象。Spring 會掃描所有被 @Autowired 標注的類,然后根據(jù)類型在 loC 容器中找到匹配的類進行注入。被 @Autowired 注釋后的類不需要再導入文件。
例子見 @Repository
@Resource 和 @Autowired 都可以用來裝配 Bean
@RequestMapping
用來處理請求地址映射,用在類或者方法上。如果用在類上,則表示類中的所有響應(yīng)請求的方法都是以該路徑作為父路徑的。
例子見 @RestController
其有六個屬性:
- Params: 指定
Request中必須包含某些參數(shù)值,才讓該方法處理 - Headers: 指定
Request中必須包含某些指定的header值,才能讓該方法處理請求 - Value: 指定請求的實際地址,指定的地址可以是
URI Template模式 - Method: 指定請求的
method類型,如GET,POST,PUT,DELETE等 - Consumes: 指定處理請求的提交內(nèi)容類型
Content-Type,比如"application/json, text/html" - Produces: 指定返回的內(nèi)容類型。只有當
Request請求頭中的Accept類型包含該指定類型時才返回
@Transactional
可以將一個方法或者類標記為事務(wù)性操作。
@Service
@Transactional
public class UserService {
@Autowired
private UserRepository userRepository;
public void updateUser(User user) {
// update user information
userRepository.save(user);
}
}慎用,如果事務(wù)執(zhí)行過程中報錯,則需要使用 try{ } catch{ throw Exception } 捕獲
@Qualifier
用于標注哪一個實現(xiàn)類才需要注入的。
@Qualifier 常和 @Autowored 一起使用:
@Component
public class PaymentService {
@Autowired
@Qualifier("paypalPaymentProcessor")
private PaymentProcessor paymentprocessor;
}使用在方法上的注釋
常用的比如:
| 注釋 | 使用位置 | 說明 |
|---|---|---|
| @RequestBody | 方法參數(shù)前 | 常用來處理 application、application/xml 等 Content-Type 類型的數(shù)據(jù),意味著 HTTP 消息是 JSON/XML 格式,需將其轉(zhuǎn)換為制定類型參數(shù) |
| @PathVariable | 方法參數(shù)前 | 將 URL 獲取的參數(shù)映射到方法參數(shù)上 |
| @Bean | 方法上 | 聲明該方法的返回結(jié)果是一個由 Spring 容器管理的 Bean |
| @ResponseBody | 方法上 | 通過適當?shù)?HttpMessageConverter 將控制器中方法返回的對象轉(zhuǎn)換為指定格式 (JSON/XML) 后,寫入 Response 對象的 body 數(shù)據(jù)區(qū) |
@RequestBody
@RestController
@RequestMapping("/api")
public class UserController {
@PostMapping("/user")
public ResponseEntity<String> addUser(@RequestBody MyData myData) {
// handle data
return ResponseEntity.ok("Data received");
}
}@PathVariable
用于獲取參數(shù)中的路徑。
@RestController
@RequestMapping("/api")
public class UserController {
@GetMapping("/users/{id}")
public ResponseEntity<String> getUserById(@PathVariable("id") Long userId) {
// ger user information by id
return ResponseEntity.ok("User Information");
}
}注意:
@PathVariable注解的參數(shù)名稱必須與URL路徑參數(shù)的名稱相匹配。- 如果參數(shù)名稱與路徑參數(shù)相同,則可以省略
@PathVariable中的參數(shù)名稱。
@Bean
用于封裝數(shù)據(jù),一般有 Setter、Getter 方法。在 MVC 模式中對應(yīng)的是 M(模型)。
@Configuration
public class AppConfig {
@Bean
public Foo foo() {
return new Foo(bar())
}
}@ResponseBody
使用該注解后,數(shù)據(jù)直接寫入輸入流中,不需要進行視圖渲染。
@RestController
@RequestMapping("/api")
public class HelloController {
@GetMapping("/hello")
@ResponseBody
public String sayHi() {
return "Hello, Jimmy.";
}
}其他注解
比如:
| 標題 | 使用位置 | 說明 |
|---|---|---|
| @EnableAutoConfiguration | 入口類/類名上 | 用來提供自動配置 |
| @SpringBootApplication | 入口類/類名上 | 用來啟動入口類 Application |
| @EnableScheduling | 入口類/類名上 | 用來開啟計劃任務(wù) |
| @EnableAsync | 入口類/類名上 | 用來開啟異步注解功能 |
| @ComponentScan | 入口類/類名上 | 用來掃描組件,可自動發(fā)現(xiàn)和裝配一些 Bean。 |
| @Value | 屬性上 | 用來獲取配置文件中的值 |
以上就是SpringBoot中常用注解的使用合集的詳細內(nèi)容,更多關(guān)于SpringBoot常用注解的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
解決SpringBoot項目啟動后網(wǎng)頁顯示Please sign in的問題
這篇文章主要介紹了解決SpringBoot項目啟動后網(wǎng)頁顯示Please sign in的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04
Spring?IoC容器Bean作用域的singleton與prototype使用配置
這篇文章主要為大家介紹了Spring?IoC容器Bean作用域的singleton與prototype使用配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12
教你怎么用SpringBoot+Mybati-Plus快速搭建代碼
Mybatis自身通過了逆向工程來幫助我們快速生成代碼,但Mybatis-plus卻更加強大,不僅僅可以生成dao,pojo,mapper,還有基本的controller和service層代碼,接下來我們來寫一個簡單的人門案例是看看如何mybatis-plus是怎么實現(xiàn)的,需要的朋友可以參考下2021-06-06
淺談Java中的atomic包實現(xiàn)原理及應(yīng)用
這篇文章主要介紹了淺談Java中的atomic包實現(xiàn)原理及應(yīng)用,涉及Atomic在硬件上的支持,Atomic包簡介及源碼分析等相關(guān)內(nèi)容,具有一定借鑒價值,需要的朋友可以參考下。2017-12-12
Java數(shù)據(jù)結(jié)構(gòu)之對象的比較
比較對象是面向?qū)ο缶幊陶Z言的一個基本特征,下面這篇文章主要給大家介紹了關(guān)于Java數(shù)據(jù)結(jié)構(gòu)之對象的比較,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-02-02

