帮你梳理springboot所有常用注解
文章目錄
- 1.springmvc注解
- 1. @RestController、@ResponseBody、@Controller
- 2. @RequestMapping、@GetMapping、@PostMapping
- 3.@RequestBody、@PathVariable、@RequestParam
- 4. @CrossOrigin、@InitBinder
- 5.@ControllerAdvice、@ExceptionHandler、@ResponseStatus
- 2. Spring Bean 注解
- 1. @ComponentScan
- 2. @Component、@Service、@Repository
- 3. @Configuration、@Bean
- 4. @Scope
- 5. @Primary、@PostConstruct與@PreDestroy
- 5.@Autowired、@Qualifier、@Resource
- 3. spingboot注解
- 1. @SpringBootApplication
- 2. @EnableAutoConfiguration
- 3. 條件注解@ConditionalOnClass與@ConditionalOnMissingClass
1.springmvc注解
1. @RestController、@ResponseBody、@Controller
@Controller是@Component注解的一個延伸,Spring會自動掃描并配置被該注解標注的類,是一個controller層必需的注解。@ResponseBody會自動將控制器中方法的返回值寫入到HTTP響應中,更實際的說@ResponseBody的作用其實是將java對象轉為json格式的數據,不再走視圖解析器,直接返回到response對象中
@RestController相當于@Controller和@ResponseBody,最常使用,上面兩個就基本用不到了。
2. @RequestMapping、@GetMapping、@PostMapping
@RequestMapping注解的主要用途是將Web請求與請求處理類中的方法進行映射,可以注解在類或方法上。
擁有6個配置屬性:
- value:映射的請求URL或者其別名
- method:兼容HTTP的方法名
- params:根據HTTP參數的存在、缺省或值對請求進行過濾
- headers:根據HTTP Header的存在、缺省或值對請求進行過濾
- consumes:設定在HTTP請求正文中允許使用的媒體類型
- products:在HTTP響應體中允許使用的媒體類型
@GetMapping和@PostMapping是省略method的寫法,推薦使用。
例:
3.@RequestBody、@PathVariable、@RequestParam
@RequestBody它將方法參數綁定到web請求對象的body中(基本是用于post請求),請求的body參數是通過HttpMessageConverter解析,根據請求主體中的參數名與對象的屬性名進行匹配并綁定值。此外,還可以通過@Valid注解對請求主體中的參數進行校驗。下面是一個使用@RequestBody的示例:
@RestController @Validated public class UserController {@PostMapping(value = "/add")public BaseResponse addUser(@Validated @RequestBody UserAddDto addDto) {return new BaseResponse<>();} }@PathVariable注解是將方法中的參數綁定到請求URI中的模板變量上,模板變量名需要使用“{ }”進行包裹,如果方法的參數名與URI模板變量名一致,則在@PathVariable中就可以省略別名的定義。
@RequestParam注解用于將方法的參數與Web請求的傳遞的參數進行綁定,特別的get方式的請求中,可以用一個dto對象來接收參數,前面不加@RequestParam即可。
@GetMapping(value = "/query/{id}")public BaseResponse<CountGroupDto> getCountGroup(@PathVariable(name = "id") String id, @RequestParam("name") String name) {BaseResponse<CountGroupDto> response = new BaseResponse<>();CountGroupDto countGroupDto = new CountGroupDto();countGroupDto.setId(id);countGroupDto.setName(name);response.setData(countGroupDto);return response;}4. @CrossOrigin、@InitBinder
@CrossOrigin注解將為請求處理類或請求處理方法提供跨域調用支持。如果我們將此注解標注類,那么類中的所有方法都將獲得支持跨域的能力。使用此注解的好處是可以微調跨域行為。
@InitBinder注解用于標注初始化WebDataBinider的方法,該方法用于對Http請求傳遞的表單數據進行處理,如時間格式化、字符串處理等。下面是使用此注解的示例:
@InitBinderpublic void initBinder(WebDataBinder binder){CustomDateEditor editor = new CustomDateEditor(new SimpleDateFormat("yyyyMMdd"), true);binder.registerCustomEditor(Data.class, editor);}5.@ControllerAdvice、@ExceptionHandler、@ResponseStatus
@ControllerAdvice需要和@ExceptionHandler等注解搭配使用,可以快速的創建統一的自定義異常處理類。首先,我們需要定義一個被@ControllerAdvice所標注的類,在該類中,定義一個用于處理具體異常的方法,并使用@ExceptionHandler注解進行標記。此外,在有必要的時候,可以使用@InitBinder在類中進行全局的配置,還可以使用@ModelAttribute配置與視圖相關的參數。
@ExceptionHander注解用于標注處理特定類型異常類所拋出異常的方法。當控制器中的方法拋出異常時,Spring會自動捕獲異常,并將捕獲的異常信息傳遞給被@ExceptionHandler標注的方法。
@ResponseStatus注解可以標注請求處理方法。使用此注解,可以指定響應所需要的HTTP STATUS。特別地,我們可以使用HttpStauts類對該注解的value屬性進行賦值。
下面是一個使用@ControllerAdvice的示例代碼
/*** 統一異常處理類*/ @RestControllerAdvice public class GlobalExceptionHandler {@ExceptionHandler@ResponseStatus(HttpStatus.BAD_REQUEST)public BaseResponse<String> handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) {StringBuilder errorInfo = new StringBuilder();BindingResult bindingResult = exception.getBindingResult();for(int i = 0; i < bindingResult.getFieldErrors().size(); i++){if(i > 0){errorInfo.append(" ; ");}FieldError fieldError = bindingResult.getFieldErrors().get(i);errorInfo.append(fieldError.getField()).append(": ").append(fieldError.getDefaultMessage());}//返回BaseResponseBaseResponse<String> response = new BaseResponse<>();response.setMsg(errorInfo.toString());response.setCode(DefaultErrorCode.error);return response;}/*** 處理自定義異常*/@ExceptionHandler@ResponseStatus(HttpStatus.BAD_REQUEST)public BaseResponse<String> handleBaseRuntimeException(BaseRuntimeException exception) {BaseResponse<String> response = new BaseResponse<>();response.setMsg(exception.getMessage());response.setCode(DefaultErrorCode.error);return response;}/*** 處理其他未知異常*/@ExceptionHandlerpublic BaseResponse<String> handleDefaultException(Exception exception) {BaseResponse<String> response = new BaseResponse<>();response.setMsg("未知錯誤");response.setCode(DefaultErrorCode.error);return response;} }2. Spring Bean 注解
1. @ComponentScan
@ComponentScan注解用于配置Spring需要掃描的被組件注解注釋的類所在的包。可以通過配置其basePackages屬性或者value屬性來配置需要掃描的包路徑。value屬性是basePackages的別名。
@Configuration @ComponentScan(basePackages="com.jun.cloud") public class ComponentScanConfiug {}2. @Component、@Service、@Repository
@Component注解用于標注一個普通的組件類,它沒有明確的業務范圍,只是通知Spring被此注解的類需要被納入到Spring Bean容器中并進行管理。@Controller、@Service、@Repository都是@Component的延伸
3. @Configuration、@Bean
用于進行springboot的配置,如:
@Configuration @EnableAsync//開啟異步任務的支持 public class TaskExecutorConfig {@Beanpublic TaskExecutor threadPoolTaskExecutor() {ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();//如果池中的實際線程數小于corePoolSize,無論是否其中有空閑的線程,都會給新的任務產生新的線程taskExecutor.setCorePoolSize(5);//連接池中保留的最大連接數。taskExecutor.setMaxPoolSize(15);//queueCapacity 線程池所使用的緩沖隊列taskExecutor.setQueueCapacity(6000);//建議一定要給線程起一個有意義的名稱前綴,便于分析日志taskExecutor.setThreadNamePrefix("demo Thread-");taskExecutor.initialize();return taskExecutor;} }4. @Scope
@Scope所限定的作用范圍有:singleton、prototype、request、session、globalSession或者其他的自定義范圍。在定義一個Bean時,可以設置Bean的scope屬性為prototype:scope=“prototype”,也可以使用@Scope注解設置,如下:
@Scope(value=ConfigurableBeanFactory.SCOPE_PROPTOTYPE)當@Scope的作用范圍設置成Singleton時,被此注解所標注的類只會被Spring IoC容器初始化一次。在默認情況下,Spring IoC容器所初始化的類實例都為singleton。
5. @Primary、@PostConstruct與@PreDestroy
5.@Autowired、@Qualifier、@Resource
@Resource(這個注解其實是屬于J2EE的),默認安裝名稱進行裝配,@Autowired默認按類型裝配。他們的區別可以查看@Autowired和@Resource的區別。
3. spingboot注解
1. @SpringBootApplication
@SpringBootApplication注解是一個快捷的配置注解。此注解相當于@Configuration、@EnableAutoConfiguration和@ComponentScan的組合。在Spring Boot應用程序的主類中,就使用了此注解。示例代碼如下:
@SpringBootApplication public class CloudStartApplication {public static void main(String[] args) {SpringApplication.run(CloudStartApplication.class, args);}}2. @EnableAutoConfiguration
3. 條件注解@ConditionalOnClass與@ConditionalOnMissingClass
這兩個注解屬于條件注解,它們根據是否存在某個類作為判斷依據來決定是否要執行某些配置。下面是一個簡單的示例代碼:
@Configuration @ConditionalOnClass(DataSource.class) class MySQLAutoConfiguration {//... }類似的還有@ConditionalOnBean與@ConditionalOnMissingBean、@ConditionalOnProperty
總結
以上是生活随笔為你收集整理的帮你梳理springboot所有常用注解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: postgresql存储函数实现大量模拟
- 下一篇: 面试再也不怕问到HashMap(一)