日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

帮你梳理springboot所有常用注解

發(fā)布時間:2024/9/30 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 帮你梳理springboot所有常用注解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 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格式的數(shù)據(jù),不再走視圖解析器,直接返回到response對象中

@RestController相當于@Controller和@ResponseBody,最常使用,上面兩個就基本用不到了。

2. @RequestMapping、@GetMapping、@PostMapping

@RequestMapping注解的主要用途是將Web請求與請求處理類中的方法進行映射,可以注解在類或方法上。
擁有6個配置屬性:

  • value:映射的請求URL或者其別名
  • method:兼容HTTP的方法名
  • params:根據(jù)HTTP參數(shù)的存在、缺省或值對請求進行過濾
  • headers:根據(jù)HTTP Header的存在、缺省或值對請求進行過濾
  • consumes:設定在HTTP請求正文中允許使用的媒體類型
  • products:在HTTP響應體中允許使用的媒體類型

@GetMapping和@PostMapping是省略method的寫法,推薦使用。
例:

@RestController @RequestMapping("/person") public class UserController {@RequestMapping(value = "/query", method = RequestMethod.GET)public String query(){return "11";}@GetMapping(value = "/query")public String getUser(){return "11";}@PostMapping(value = "/add")public String addUser(){return "11";}}

3.@RequestBody、@PathVariable、@RequestParam

@RequestBody它將方法參數(shù)綁定到web請求對象的body中(基本是用于post請求),請求的body參數(shù)是通過HttpMessageConverter解析,根據(jù)請求主體中的參數(shù)名與對象的屬性名進行匹配并綁定值。此外,還可以通過@Valid注解對請求主體中的參數(shù)進行校驗。下面是一個使用@RequestBody的示例:

@RestController @Validated public class UserController {@PostMapping(value = "/add")public BaseResponse addUser(@Validated @RequestBody UserAddDto addDto) {return new BaseResponse<>();} }

@PathVariable注解是將方法中的參數(shù)綁定到請求URI中的模板變量上,模板變量名需要使用“{ }”進行包裹,如果方法的參數(shù)名與URI模板變量名一致,則在@PathVariable中就可以省略別名的定義。

@RequestParam注解用于將方法的參數(shù)與Web請求的傳遞的參數(shù)進行綁定,特別的get方式的請求中,可以用一個dto對象來接收參數(shù),前面不加@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請求傳遞的表單數(shù)據(jù)進行處理,如時間格式化、字符串處理等。下面是使用此注解的示例:

@InitBinderpublic void initBinder(WebDataBinder binder){CustomDateEditor editor = new CustomDateEditor(new SimpleDateFormat("yyyyMMdd"), true);binder.registerCustomEditor(Data.class, editor);}

5.@ControllerAdvice、@ExceptionHandler、@ResponseStatus

@ControllerAdvice需要和@ExceptionHandler等注解搭配使用,可以快速的創(chuàng)建統(tǒng)一的自定義異常處理類。首先,我們需要定義一個被@ControllerAdvice所標注的類,在該類中,定義一個用于處理具體異常的方法,并使用@ExceptionHandler注解進行標記。此外,在有必要的時候,可以使用@InitBinder在類中進行全局的配置,還可以使用@ModelAttribute配置與視圖相關的參數(shù)。

@ExceptionHander注解用于標注處理特定類型異常類所拋出異常的方法。當控制器中的方法拋出異常時,Spring會自動捕獲異常,并將捕獲的異常信息傳遞給被@ExceptionHandler標注的方法。

@ResponseStatus注解可以標注請求處理方法。使用此注解,可以指定響應所需要的HTTP STATUS。特別地,我們可以使用HttpStauts類對該注解的value屬性進行賦值。

下面是一個使用@ControllerAdvice的示例代碼

/*** 統(tǒng)一異常處理類*/ @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注解用于標注一個普通的組件類,它沒有明確的業(yè)務范圍,只是通知Spring被此注解的類需要被納入到Spring Bean容器中并進行管理。@Controller、@Service、@Repository都是@Component的延伸

3. @Configuration、@Bean

用于進行springboot的配置,如:

@Configuration @EnableAsync//開啟異步任務的支持 public class TaskExecutorConfig {@Beanpublic TaskExecutor threadPoolTaskExecutor() {ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();//如果池中的實際線程數(shù)小于corePoolSize,無論是否其中有空閑的線程,都會給新的任務產生新的線程taskExecutor.setCorePoolSize(5);//連接池中保留的最大連接數(shù)。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默認按類型裝配。他們的區(qū)別可以查看@Autowired和@Resource的區(qū)別。

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

這兩個注解屬于條件注解,它們根據(jù)是否存在某個類作為判斷依據(jù)來決定是否要執(zhí)行某些配置。下面是一個簡單的示例代碼:

@Configuration @ConditionalOnClass(DataSource.class) class MySQLAutoConfiguration {//... }

類似的還有@ConditionalOnBean與@ConditionalOnMissingBean、@ConditionalOnProperty

總結

以上是生活随笔為你收集整理的帮你梳理springboot所有常用注解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。