SpringBoot中常用注解的使用合集
Spring Boot
框架提供了許多注解來簡化配置和開發(fā)過程。
什么是注解式編程
注解 annotation
用來定義一個類、屬性和一些方法,以便程序能夠被編譯處理。
它相當于一個說明文件,告訴應用程序某個類或者屬性是什么,要怎么處理。注解可以用于標注包、類、方法和變量等。
注解式編程是一種基于注釋的程序編碼風格。它使用特定的注釋來配置和定義應用程序的行為,而不需要顯式編寫大量的配置代碼。
比如:
@RestController public class Jimmy { @RequestMapping("/jimmy") public String sayHi() { return "Hello, Jimmy." } }
常用注解
注解分不同場景使用,使用在類名上,使用在方法上等。
使用在類名上的注解
注解 | 使用位置 | 說明 |
---|---|---|
@RestController | 類名上 | 作用相當于 @ResponseBody 加 @Controller |
@Controller | 類名上 | 聲明此類是一個 SpringMVC Controller 對象 |
@Service | 類名上 | 聲明一個業(yè)務處理類(實現(xiàn)非接口類) |
@Repository | 類名上 | 聲明數(shù)據(jù)庫訪問類(實現(xiàn)非接口類) |
@Component | 類名上 | 代表其是 Spring 管理類,常用在無法用 @Service、@Repository 描述的 Spring 管理類上,相當于通用的注釋 |
@Configuration | 類名上 | 聲明此類是一個配置類,常與 @Bean 配合使用 |
@Resource | 類名上 | 默認按 byName 自動注入 |
@Autowired | 類名上、屬性或構造函數(shù)參數(shù)上 | 默認按 byType 自動注入 |
@RequestMapping | 類名或方法上 | 用在類上,則表示所有響應請求的方法都是以該地址作為父路徑的 |
@Transactional | 類名或方法上 | 用于處理事務 |
@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è)務處理類(實現(xiàn)非接口類),用于標注服務層,處理業(yè)務邏輯。
@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
,可以在應用程序的其他部分進行注入和使用。
@Component public class EmailService { public void sendEmail(String recipient, String message) { // Send email logic } }
@Compoent
沒有特定的業(yè)務含義。如果在應用程序中有更具體的組件類型,如數(shù)據(jù)訪問組件(@Repository
),服務組件(@Service
),控制器組件(@Controller
)等,推薦使用更加具體的注釋以更好表達其用途和語義。
@Resource
用來標記和注入依賴。它可以用于注入其他 Spring
管理的 Bean
、JNDI
資源、以及其他的依賴項。
@Service public class UserService { @Resource private UserRepository userRepository; }
@Configuration
用于標識一個類是配置類。配置類在應用程序中扮演著重要的角色,用于定義和組織應用程序的一些配置。它作為 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
用來處理請求地址映射,用在類或者方法上。如果用在類上,則表示類中的所有響應請求的方法都是以該路徑作為父路徑的。
例子見 @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
可以將一個方法或者類標記為事務性操作。
@Service @Transactional public class UserService { @Autowired private UserRepository userRepository; public void updateUser(User user) { // update user information userRepository.save(user); } }
慎用,如果事務執(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 格式,需將其轉換為制定類型參數(shù) |
@PathVariable | 方法參數(shù)前 | 將 URL 獲取的參數(shù)映射到方法參數(shù)上 |
@Bean | 方法上 | 聲明該方法的返回結果是一個由 Spring 容器管理的 Bean |
@ResponseBody | 方法上 | 通過適當?shù)?HttpMessageConverter 將控制器中方法返回的對象轉換為指定格式 (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
模式中對應的是 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 | 入口類/類名上 | 用來開啟計劃任務 |
@EnableAsync | 入口類/類名上 | 用來開啟異步注解功能 |
@ComponentScan | 入口類/類名上 | 用來掃描組件,可自動發(fā)現(xiàn)和裝配一些 Bean。 |
@Value | 屬性上 | 用來獲取配置文件中的值 |
以上就是SpringBoot中常用注解的使用合集的詳細內(nèi)容,更多關于SpringBoot常用注解的資料請關注腳本之家其它相關文章!
相關文章
解決SpringBoot項目啟動后網(wǎng)頁顯示Please sign in的問題
這篇文章主要介紹了解決SpringBoot項目啟動后網(wǎng)頁顯示Please sign in的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04Spring?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