当前位置:数据分析 > 【第343期】面试官:SpringBoot中常用的注解有哪些?

【第343期】面试官:SpringBoot中常用的注解有哪些?

  • 发布:2023-10-05 03:01

围观者: 推荐一个好朋友 1. spring Web MVC和Spring Bean注解 Spring Web MVC 注释 @RequestMapping @RequestMapping注解的主要目的是将Web请求映射到请求处理类中的方法。 Spring MVC 和 Spring WebFlux 都通过 RquestMappingHandlerMapping 和 RequestMappingHndlerAdapter 两个类提供对 @RequestMapping 注解的支持。 @RequestMapping注解注释了请求处理类中的请求处理方法; @RequestMapping注解有以下六个配置属性: value: 映射的请求 URL 或其别名 method:HTTP兼容的方法名称 params:根据 HTTP 参数的存在、默认值或值过滤请求 header:根据 HTTP 标头的存在、默认或值过滤请求 Consumer:设置HTTP请求体中允许的媒体类型 产品:HTTP 响应正文中允许的媒体类型 提示:在使用@RequestMapping之前,请求处理类还需要标记@Controller或@RestController 以下是使用 @RequestMapping 的两个示例: 图片 @RequestMapping还可以对类进行标记,这样当类中的处理方法映射请求路径时,会自动将@RequestMapping设置的值拼接在类上的方法中的映射路径之前,如下: 图片 @RequestBody @RequestBody用在请求处理方法的参数列表中。它可以将请求体中的参数绑定到一个对象上。请求体参数通过HttpMessageConverter传递,根据请求体中的参数名和对象的属性名进行匹配。并绑定该值。另外,请求体中的参数可以通过@Valid注解进行验证。 这是使用@RequestBody的示例: 图片 @GetMapping@GetMapping注解用于处理HTTP GET请求,并将请求映射到特定的处理方法。具体来说,@GetMapping是一个组合注解,相当于@RequestMapping(method=RequestMethod.GET)的快捷方式。 这是使用@GetMapping的示例: 图片 @PostMapping @PostMapping注解用于处理HTTP POST请求,并将请求映射到特定的处理方法。 @PostMapping和@GetMapping一样,也是一个组合注解,相当于@RequestMapping(method=www.sychzs.cn)的快捷方式。 这是使用 @PostMapping 的示例: 图片 @PutMapping @PutMapping注解用于处理HTTP PUT请求,并将请求映射到特定的处理方法。 @PutMapping是一个组合注解,相当于@RequestMapping(method=HttpMethod.PUT)的快捷方式。 这是使用 @PutMapping 的示例: 图片 @DeleteMapping @DeleteMapping 注解用于处理 HTTP DELETE 请求并将请求映射到删除方法。 @DeleteMapping是一个组合注解,相当于@RequestMapping(method=HttpMethod.DELETE)的快捷方式。 这是使用@DeleteMapping的示例: 图片 @PatchMapping @PatchMapping注解用于处理HTTP PATCH请求,并将请求映射到相应的处理方法。 @PatchMapping 相当于 @RequestMapping(method=HttpMethod.PATCH) 的快捷方式。 这是一个简单的例子: 图片 @ControllerAdvice@ControllerAdvice是@Component注解的扩展注解。 Spring会自动扫描并检测带有@ControllerAdvice注释的类。 @ControllerAdvice需要与@ExceptionHandler、@InitBinder和@ModelAttribute注解配合使用,主要用于处理控制器抛出的异常信息。 首先,我们需要定义一个用@ControllerAdvice注释的类。在这个类中,定义一个处理特定异常的方法,并使用@ExceptionHandler注解进行标记。 另外,必要时可以使用@InitBinder在类中进行全局配置,也可以使用@ModelAttribute来配置视图相关的参数。使用@ControllerAdvice注解,可以快速创建统一的、自定义的异常处理类。 这是使用@ControllerAdvice的示例代码: 图片 @ResponseBody @ResponseBody会自动将控制器中方法的返回值写入HTTP响应中。特别是,@ResponseBody注解只能在@Controller注解标记的类中使用。如果是在@RestController标记的类中,则该方法不需要使用@ResponseBody注解进行注解。 @RestController相当于@Controller和@ResponseBody的组合注解。 这是使用此注释的示例 图片 @ExceptionHandler @ExceptionHander注解用于注解处理特定类型异常类抛出的异常的方法。当控制器中的方法抛出异常时,Spring会自动捕获该异常,并将捕获的异常信息传递给@ExceptionHandler注解的方法。 以下是使用此注释的示例: 图片 @ResponseStatus @ResponseStatus注解可以标记请求处理方法。使用此注释,您可以指定响应所需的 HTTP STATUS。特别是,我们可以使用 HttpStauts 类为注释的 value 属性赋值。 这是使用 @ResponseStatus 注释的示例: 图片 @路径变量@PathVariable 注解将方法中的参数绑定到请求 URI 中的模板变量。可以通过@RequestMapping注解指定URI的模板变量,然后使用@PathVariable注解将方法中的参数绑定到模板变量上。 特别是,@PathVariable 注释允许我们使用 value 或 name 属性为参数提供别名。这是使用此注释的示例: 图片 模板变量名需要用 { } 括起来。如果方法的参数名与URI模板变量名一致,@PathVariable中可以省略别名的定义。 这是一个简写示例: 图片 提示:如果参数是非必需、可选项,可以在@PathVariable中设置require = false @RequestParam @RequestParam注解用于将方法的参数绑定到Web请求中传递的参数。使用@RequestParam可以轻松访问HTTP请求参数的值。 这是使用此注释的代码示例: 图片 该注解的其他属性配置与@PathVariable相同。特别是,如果传递的参数为空,还可以通过defaultValue设置一个默认值。示例代码如下: 图片 @控制器 @Controller 是 @Component 注解的扩展。 春天 标有此注释的类将被自动扫描和配置。该注解用于注解 Spring MVC 控制器。以下是使用此注释的示例代码: 图片 @RestController @RestController 在 Spring 4.0 中引入。这是一个特定的控制器注释。该注解相当于@Controller和@ResponseBody的快捷方式。使用该注解时,无需在方法上使用@ResponseBody注解。 以下是使用此注释的示例代码: 图片 @ModelAttribute 通过此注释,可以通过模型索引名称访问控制器中已存在的模型。这是使用此注释的简单示例: 图片 与@PathVariable和@RequestParam注解一样,如果参数名称与模型名称相同,则无需指定索引名称。缩写示例如下: 图片 特别是,如果该方法使用@ModelAttribute注解,Spring会将该方法的返回值绑定到具体的Model上。示例如下:图片 所有带有@ModelAttribute注解的方法都会在Spring调用具体处理方法之前执行。 @CrossOrigin @CrossOrigin注解将为请求处理类或请求处理方法提供跨域调用支持。如果我们用这个注解来注解一个类,那么该类中的所有方法都将获得跨域支持。使用此注释的好处是您可以微调跨域行为。使用该注解的示例如下: 图片 @InitBinder @InitBinder注解用于注解初始化WebDataBinider的方法。该方法用于对Http请求传递过来的表单数据进行处理,如时间格式化、字符串处理等。下面是使用该注解的示例: 图片 2. Spring Bean注解 本节我们主要列出Spring Bean相关的四个注解以及如何使用它们。 @ComponentScan @ComponentScan注解用于配置Spring需要扫描组件注解的类的包。您可以通过配置其basePackages属性或value属性来配置要扫描的包路径。 value 属性是 basePackages 的别名。该注解的用法如下: @成分 @Component注解用于注解公共组件类。它没有明确的业务范围,只是告知Spring被注解的类需要包含在Spring Bean容器中并进行管理。该注解的使用示例如下: 图片 @服务 @Service注解是@Component的扩展(特例),用于注解业务逻辑类。与@Component注解一样,使用该注解注解的类将自动被Spring管理。以下是使用@Service注解的示例: 图片 @存储库 @Repository注解也是@Component注解的扩展。与@Component注解一样,使用该注解注解的类将自动被Spring管理。 @Repository注解用于注解DAO层的数据持久化类。该注解的用法如下: 图片 3. Spring Dependency Inject 和 Bean Scops 注解 Spring DI 注解 @依赖于取决于 @DependsOn注解可以配置Spring IoC容器在初始化一个Bean之前先初始化其他Bean对象。以下是使用该注解的示例代码: 图片 @豆@Bean注解的主要作用是通知Spring该注解所标记的类需要包含在Bean管理工厂中。 @Bean注解的使用非常简单。这里重点关注@Bean注解中initMethod和destroyMethod的使用。示例如下: 图片 范围注释 @范围 @Scope注解可以用来定义@Component标记的类的作用域和@Bean标记的类的作用域。 @Scope 限制的范围包括:singleton、prototype、request、session、globalSession 或其他自定义范围。这里我们以prototype为例进行说明。 当 Spring Bean 被声明为原型(原型模式)时,Spring IoC 容器将在每次需要该类时初始化修改后的类的新实例。定义Bean时,可以设置Bean的scope属性为prototype:scope="prototype",也可以使用@Scope注解来设置,如下: @Scope(值=ConfigurableBeanFactory.SCOPE_PROPTOTYPE) 下面给出了使用 @Scope 注释的两种不同方法。示例代码如下: 图片 @Scope单例模式 当@Scope的作用域设置为Singleton时,该注解标记的类只会被Spring IoC容器初始化一次。默认情况下,Spring IoC 容器初始化的所有类实例都是单例。基于同样的原理,这种情况有两种配置方法。示例代码如下: 图片 4.容器配置注解 @Autowired @Autowired 注解用于标记 Spring 将解析和注入的依赖项。此注释可以应用于构造函数、字段和 setter 方法。 作用于构造函数 下面是使用@Autowired注解注释构造函数的示例: 图片 作用于 setter 方法 以下是@Autowired注解注释setter方法的示例代码: 图片 作用于字段 @Autowired 注释是最简单的字段注释。只需要将这个注解添加到对应的字段即可。示例代码如下: 图片 @基本的 当系统中需要配置多个相同类型的bean时,@Primary可以定义这些bean的优先级。下面给出一个示例代码来说明此功能: 图片输出结果: 这是发送钉钉方式消息。 @PostConstruct 和 @PreDestroy 值得注意的是,这两个注解不属于Spring。它们源自 JSR-250 中的两个注释,位于 common-annotations.jar 中。 @PostConstruct注解用于注解Spring初始化Bean之前需要执行的方法。 @PreDestroy注解用于标记Bean被销毁之前需要执行的方法。下面是具体的示例代码: 图片 @预选赛 当系统中存在多个相同类型的bean时,@Autowired在进行依赖注入时不知道选择哪个实现类进行注入。此时,我们可以使用@Qualifier注解进行微调,帮助@Autowired选择正确的依赖项。以下是此注释的代码示例: 图片 5. Spring Boot注解 @springboot应用程序 @SpringBootApplication注解是一个快速配置注解。在其标记的类中,可以定义一个或多个bean,并自动触发bean的自动配置和自动扫描组件。该注解相当于@Configuration、@EnableAutoConfiguration和@ComponentScan的组合。 该注解用在Spring Boot应用程序的主类中。示例代码如下: @SpringBootApplicationpublic class Application{ public static void main(String [] args){ www.sychzs.cn(Application.class,args); } }} @EnableAutoConfiguration @EnableAutoConfiguration注解用于通知Spring自动配置当前类路径中引入的依赖包相关的配置项。 @ConditionalOnClass 和 @ConditionalOnMissingClass 这两个注解是类条件注解,根据某个类是否存在作为判断依据来决定是否进行某些配置。这是一个简单的示例代码:@Configuration@ConditionalOnClass(DataSource.class)class MySQLAutoConfiguration { //...} @ConditionalOnBean 和 @ConditionalOnMissingBean 这两个注解是对象条件注解,根据对象是否存在来决定是否执行某些配置方法。示例代码如下: @Bean@ConditionalOnBean(name="dataSource")LocalContainerEntityManagerFactoryBeanEntityManagerFactory(){ //...}@Bean@ConditionalOnMissingBeanpublic MyBean myBean(){ //...} @ConditionalOnProperty @ConditionalOnProperty注解根据Spring配置文件中的配置项是否满足配置要求来决定是否执行其注解的方法。示例代码如下: @Bean@ConditionalOnProperty(name="alipay",havingValue="on")支付宝alipay(){ return new Alipay();} @ConditionalOnResource 该注解用于检测当配置文件存在时,触发其注解的方法。以下是使用该注解的代码示例: @ConditionalOnResource(resources = "classpath:website.properties")Properties addWebsiteProperties(){ //...} @ConditionalOnWebApplication 和 @ConditionalOnNotWebApplication 这两个注解用于判断当前应用程序是否是Web应用程序。如果当前应用程序是Web应用程序,则使用Spring WebApplicationContext并定义其会话的生命周期。这是一个简单的例子:@ConditionalOnWebApplicationHealthCheckController healthCheckController(){ //...} @条件表达式 该注释允许我们控制更细粒度的基于表达式的配置条件限制。当表达式满足某个条件或者表达式为真时,将执行带有该注解的方法。 @Bean@ConditionalException("${localstore} && ${local == 'true'}")LocalFileStore store(){ //...} @条件 @Conditional注解可以控制更复杂的配置条件。当Spring内置的条件控制注解不能满足应用需求时,可以使用该注解来定义自定义的控制条件,以满足自定义的需求。这是使用此注释的简单示例: @Conditioanl(CustomConditioanl.class)CustomProperties addCustomProperties(){ //...} 总结 本课程总结了Spring Boot中各类注解的常见用法,让大家对常见的Spring Boot注解有一个全面的了解。 由于篇幅原因,关于Spring Boot的一些不常用的注释将在接下来的分享中补充和说明。 感谢您的阅读,希望对您有所帮助:) 来源:https://www.sychzs.cn/ 主流java进阶技术(学习资料分享) 而不是在网上搜索问题?还不赶快关注我们吧~ PS:因为公众号平台改变了推送规则,如果不想错过内容,看完后记得点击“阅读”并加个“星”,这样每次推送新文章,它将尽快出现在您的订阅中。在列表中。点击“关注”即可支持我们!

相关文章