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