当前位置: 首页 > article >正文

Spring中一些常见注解的作用

文章目录

  • @ConditionalOnProperty
  • @RefreshScope
  • @EnableConfigurationProperties
  • @Conditional
  • @ConditionalOnClass
  • @ConditionalOnProperty(prefix = "spring.druid.stat-view-servlet", name = "enabled", havingValue = "true")
  • @Primary
  • @AutoConfigureAfter
  • @Accessors(chain = true)

@ConditionalOnProperty

@ConditionalOnProperty 注解是 Spring Boot 提供的一种条件注解,用于根据配置文件中的属性值来决定某个 Bean 是否被加载。通过这个注解,你可以在应用程序的配置中灵活地控制 Bean 的创建。

具体来说,@ConditionalOnProperty 注解会检查指定的属性是否存在,以及其值是否符合预期。当这些条件满足时,相关的 Bean 才会被注册到 Spring 容器中。

  • name:指定要检查的属性名。
  • havingValue:属性的期望值,只有当属性的值与这个值匹配时,条件才成立(默认为 “true”)。
  • matchIfMissing:如果设置为 true,则在属性缺失的情况下条件也会匹配(默认为 false)。

@ConditionalOnProperty 是一个非常有用的工具,可以帮助你根据外部配置条件地控制 Bean 的创建,从而增强 Spring Boot 应用的灵活性和可配置性。

@RefreshScope

@RefreshScope 是 Spring Cloud Framework 中的一个注解,主要用于实现对 Spring Bean 的动态刷新能力。

  1. 动态刷新配置:
    当您使用 Spring Cloud Config 进行配置管理时,@RefreshScope 注解可以自动刷新那些需要依赖于配置的 Spring Bean。即,当配置更新后,使用此注解标记的 Bean 会在下次请求时重新加载新的配置。
  2. 与配置中心集成:
    如果应用程序连接了配置中心(例如 Spring Cloud Config Server),当你在配置中心更新了相关配置,使用了 @RefreshScope 注解的 Bean 会在调用 /actuator/refresh 端点时被重新初始化,加载最新的配置属性。

@RefreshScope 注解使得 Spring 应用可以在运行时动态刷新 Beans 中的配置值,非常适合在需要频繁调整配置的微服务架构中使用。通过该注解,您可以在不重启应用程序的情况下,轻松地管理和使用外部配置。

@EnableConfigurationProperties

@EnableConfigurationProperties 注解是 Spring Boot 中用于启用和绑定外部配置属性(通常是在 application.properties 或 application.yml 文件中定义的)到一个 Java Bean 的机制。具体来说,当你使用这个注解时,可以将指定的配置类(如 DruidProperties)和配置文件中的属性相关联,使得这些属性可以被注入并使用。

  1. 自动绑定配置: @EnableConfigurationProperties 会自动将外部配置文件中的属性与该 Java Bean 的字段进行绑定。
  2. 便于管理和使用配置: 使用这个注解,有助于集中管理应用的配置,利用类型安全的方式来获取配置属性。
  3. 支持多种数据类型: 在绑定时,Spring 支持多种数据类型的自动转换

@Conditional

@Conditional 注解是用来根据实现的 Condition 接口中的条件动态注册 Bean 的。开发者需要实现 Condition 接口,并在 matches 方法中定义具体的条件逻辑。当 Spring 容器处理带有该注解的 Bean 时,会调用该条件类的 matches 方法,如果返回 true,则注册该 Bean;如果返回 false,则不注册。

@ConditionalOnClass

@ConditionalOnClass 是 Spring Boot 提供的一个注解,专门用于根据特定类的存在与否来判断是否注册 Bean。如果指定的类(在本例中是 DruidDataSource)在类路径中存在,则条件成立,Bean 将被创建;否则,不会创建该 Bean。这种方式通常用于模块化开发,使得某些功能仅在对应的类库存在时才生效。

@ConditionalOnProperty(prefix = “spring.druid.stat-view-servlet”, name = “enabled”, havingValue = “true”)

用来控制 Bean 注册的一种条件注解。它根据应用程序的属性配置来决定一个 Bean 是否应该被创建。

  • prefix:指定属性的前缀。在本例中,“spring.druid.stat-view-servlet” 是属性的前缀,这意味着所有相关的配置项都会以此前缀开头。
  • name:指定要检查的属性的具体名称。在这个例子中,“enabled” 表示我们要查看的属性名称。
  • havingValue:指定属性的期望值。只有在属性的值与此匹配时,条件才成立。这里,如果 enabled 的值为 “true”,条件才会满足。

@Primary

用于指示某个 Bean 是优先的 Bean,当存在多个同类型的 Bean 时,Spring 容器在注入依赖时会优先选择被标记为 @Primary 的那个 Bean。

  1. **解决 Bean 的冲突:**在 Spring 应用上下文中,如果有多个模块或组件定义了相同类型的 Bean,Spring 在进行自动装配时会遇到冲突。@Primary 可以用来指定一个 Bean 作为默认的 Bean,以便在自动装配时优先被选择。
  2. **简化 Bean 选择:**当使用注入的接口或父类类型时,@Primary 可以帮助 Spring 确定使用哪个具体的实现类型,而无需明确指定 Bean 的名称。

@AutoConfigureAfter

用于自动配置类的控制机制,用于指定某个自动配置类应在另一个自动配置类之后加载。

  1. 合理的加载顺序:有时不同的配置类之间存在依赖关系,使用 @AutoConfigureAfter 可以确保被注解的类总是在指定的类之后加载,从而避免因加载顺序不当而导致的 Bean 未找到或初始化问题。
  2. 增强模块的独立性:它使得开发人员可以专注于模块的功能,而不必过多担心其他模块的加载顺序。通过注解声明依赖关系,框架会自动管理这些依赖。
  3. 用于定制自动配置: 通过指定依赖的自动配置类,可以对特定的 Beans 进行定制,确保这些 Beans 在其他相关 Beans 之后进行配置或修改。

@Accessors(chain = true)

@Accessors(chain = true) 是 Lombok 提供的一个注解,用于简化 Java 类的 getter 和 setter 方法的生成。

  1. 链式调用支持:当 chain 参数设置为 true 时,Lombok 会生成的 setter 方法返回当前对象(this),而不是 void。这使得可以在设置多个属性时,进行链式调用。
  2. 自定义命名风格:通过 @Accessors 注解,可以进一步自定义生成的 getter 和 setter 的命名风格

http://www.kler.cn/a/321359.html

相关文章:

  • 重拾设计模式--状态模式
  • Linux中Mysql5.7主从架构(一主多从)配置教程
  • 深入了解Java在人工智能领域的最新应用
  • 如何优雅的关闭GoWeb服务器
  • 在uniapp Vue3版本中如何解决webH5网页浏览器跨域的问题
  • [JavaScript] 我该怎么去写一个canvas游戏
  • 使用ucharts写的小程序页面柱状图上方没有数字
  • 7款国内AI搜索引擎大全网站
  • 说说海外云手机的自动化功能
  • [Redis][哨兵][上]详细讲解
  • 深入浅出MongoDB(一)
  • 嵌入式C语言自我修养:GNU C编译器扩展语法精讲
  • 利用Puppeteer-Har记录与分析网页抓取中的性能数据
  • TikTok的网络环境搭建指南
  • C++实现二叉树的创建删除,dfslfs,求叶子结点个数,求叶子结点个数,求树的高度
  • D19【python接口自动化学习】-python基础之内置数据类型
  • 矿石运输船数据集、散货船数据集、普通货船数据集、集装箱船数据集、渔船数据集以及客船数据集
  • Web3Auth 如何工作?
  • 相机、镜头参数详解以及相关计算公式
  • 【OceanBase 诊断调优】—— GC问题根因分析
  • centos7 启动mongodb时报错ERROR: child process failed, exited with error number 1
  • electron使用npm install出现下载失败的问题
  • 【HTML】img标签和超链接标签
  • Apache Iceberg 概述
  • ansible playbook多个play多个task
  • ChatGPT高级语音助手正式上线!OpenAI:50多种语言、9种声线可选