SpringBoot常用註解總結
在SpringBoot框架中,註解做為一種隱式配置,極大的簡化了之前xml文件的配置方式。SpringBoot中包含許多種類的註解,這裏對在SpingBoot項目中經常使用到的一些註解的進行大致的歸納總結;
一、啟動相關
1、@SpringBootApplication
在SpirngBoot啟動類裏面,都加入了此啟動註解,此註解是個組合註解,包括了@SpringBootConfiguration 、@EnableAutoConfiguration和@ComponentScan註解。
- @SpringBootConfiguration 繼承至@Configuration
,其實兩種功能一致,都是標註該類為配置類
- @EnableAutoConfiguration 這個註解是SpirngBoot自動配置的核心所在,通過此註解,能所有符合自動配置條件的bean的定義加載到
spring
容器中。 - @ComponentScan 該註解會掃描當前包及子包下面被納入sping容器管理的類。
註意事項:
- 一般我們在實際項目中會根據自己的需要排除一些無需自動配置的類,例如我們會配置自己的數據庫,所以就不需要springboot自動註入數據源,這可以利用
exclude
進行排除
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
- 當需掃描第三方jar包時,我們可以通過在配置類中使用@Configuration與@ComponentScan來引入第三方jar包下的類
@Configuration @ComponentScan(basePackages = {"com.test.service"}) //引入第三方jar包下的類
2、@Import
@Import註解可用來導入一個或者多個 Spring 配置文件,特別是第三方jar包下的一些配置類,需要通過Import註解進行加載,代碼如下所示
@Import({KafkaConfig.class, JedisConfig.class}) //引入第三方jar包裏配置類
二、配置相關
以一般的的配置類中用到的註解為例
1、@Configuration
@Configuration專門用來標註配置類,它一般會配合
2、@Bean
使用@Bean註解拿到配置返回相關實例,並放入sping容器中統一管理
3、@PropertySource
目的是加載指定路徑下的屬性文件
5、@Value
配合@PropertySource註解使用,指定該字段對應的配置文件中的內容
4、@Order
利用@Order控制配置類的加載順序
結合以上註解對kafka進行配置示例代碼如下
@Configuration @PropertySource("classpath:spring-kafka.properties") @Order(2) public class KafkaConfig { @Value("${spring.kafka.bootstrap-servers}") private String bootstrapServers; @Bean public KafkaListenerContainerFactory<ConcurrentMessageListenerContainer<Object, Object>> kafkaListenerContainerFactory() { ConcurrentKafkaListenerContainerFactory<Object, Object> factory = new ConcurrentKafkaListenerContainerFactory<Object, Object>(); factory.setConsumerFactory(consumerFactory()); factory.setConcurrency(1); // factory .getContainerProperties().setPollTimeout(1000); return factory; } }
三、構造相關
1、@Service
用於標註服務層,主要用來進行業務的邏輯處理
2、@Repository
用於標註持久層,主要用來進行數據庫相關操作
3、@Component
一個通用的註解,可以註解各種組件,就是說當我們需要註入sping容器中bean類沒有明確分類時(不屬於@service、@Repository等的時候),我們就可以使用@Component來標註這個類。
4、@Scope
spring容器管理bean默認是單例模式,如果你需要使用多例模式可以通過@Scope("prototype")註解來實現。
5、@Autowired
這個就很簡單了,用於Spring容器中Bean類實例的註入
6、@PostConstruct
在Bean初始化之後(構造方法和@Autowired之後)執行指定操作。如果在項目中有些操作需要在Bean類構造後執行,可以使用@PostConstruct註解,實例代碼如下
@Component public class demo { @PostConstruct public void start() { //在構造方法和@Autowired註入實例後執行 } }
四、web相關
1、@Controller 和 @RestController
控制器的註解,處理http請求的入口,這兩個註解的主要區別在於@Controller中如果需要返回json數據需要使用@ResponseBody註解來配合,直接用@RestController則直接返回json數據
2、@RequestMapping
RequestMapping是一個用來處理請求地址映射的註解,可用於類或方法上。用於類上,表示類中的所有響應請求的方法都是以該地址作為父路徑。
RequestMapping註解有六大屬性
value, method;
-
value: 指定請求的實際地址,指定的地址可以是URI Template 模式(後面將會說明);
-
method: 指定請求的method類型, GET、POST、PUT、DELETE等;
consumes,produces;
-
consumes: 指定處理請求的提交內容類型(Content-Type),例如application/json, text/html;
-
produces: 指定返回的內容類型,僅當request請求頭中的(Accept)類型中包含該指定類型才返回;
params,headers;
-
params: 指定request中必須包含某些參數值是,才讓該方法處理。
-
headers: 指定request中必須包含某些指定的header值,才能讓該方法處理請求;
RequestMapping的簡化註解有:
@GetMapping 等同於 @RequestMapping(method = RequestMethod.GET) @PostMapping 等同於 @RequestMapping(method = RequestMethod.POST) @PutMapping 等同於 @RequestMapping(method = RequestMethod.PUT) @DeleteMapping 等同於 @RequestMapping(method = RequestMethod.DELETE) @PatchMapping 等同於 @RequestMapping(method = RequestMethod.PATCH)
3、@RequestBody
RequestBody註解允許request的參數在reqeust體中,也就是後端以實體的方式接收前端發送的數據
4、@RequestParam
RequestParam註解則是以不同參數之間用&分隔的方式接收前端發送的數據
結合以上註解的常規示例代碼如下
@RestController @RequestMapping("/api") public class ApiController extends BaseController { @PostMapping("/login") public User login(@RequestBody User user){ //代碼 } @GetMapping("/getUser") public User getUser(@RequestParam String userName, @RequestParam String userPhone){ //代碼 } }
以上就是在SpirngBoot項目中經常使用到的一些註解進行的總結,當然還有很多其他註解在這裏就不一一贅述了。
SpringBoot常用註解總結