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 的动态刷新能力。
- 动态刷新配置:
当您使用 Spring Cloud Config 进行配置管理时,@RefreshScope 注解可以自动刷新那些需要依赖于配置的 Spring Bean。即,当配置更新后,使用此注解标记的 Bean 会在下次请求时重新加载新的配置。 - 与配置中心集成:
如果应用程序连接了配置中心(例如 Spring Cloud Config Server),当你在配置中心更新了相关配置,使用了 @RefreshScope 注解的 Bean 会在调用 /actuator/refresh 端点时被重新初始化,加载最新的配置属性。
@RefreshScope 注解使得 Spring 应用可以在运行时动态刷新 Beans 中的配置值,非常适合在需要频繁调整配置的微服务架构中使用。通过该注解,您可以在不重启应用程序的情况下,轻松地管理和使用外部配置。
@EnableConfigurationProperties
@EnableConfigurationProperties 注解是 Spring Boot 中用于启用和绑定外部配置属性(通常是在 application.properties 或 application.yml 文件中定义的)到一个 Java Bean 的机制。具体来说,当你使用这个注解时,可以将指定的配置类(如 DruidProperties)和配置文件中的属性相关联,使得这些属性可以被注入并使用。
- 自动绑定配置: @EnableConfigurationProperties 会自动将外部配置文件中的属性与该 Java Bean 的字段进行绑定。
- 便于管理和使用配置: 使用这个注解,有助于集中管理应用的配置,利用类型安全的方式来获取配置属性。
- 支持多种数据类型: 在绑定时,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。
- **解决 Bean 的冲突:**在 Spring 应用上下文中,如果有多个模块或组件定义了相同类型的 Bean,Spring 在进行自动装配时会遇到冲突。@Primary 可以用来指定一个 Bean 作为默认的 Bean,以便在自动装配时优先被选择。
- **简化 Bean 选择:**当使用注入的接口或父类类型时,@Primary 可以帮助 Spring 确定使用哪个具体的实现类型,而无需明确指定 Bean 的名称。
@AutoConfigureAfter
用于自动配置类的控制机制,用于指定某个自动配置类应在另一个自动配置类之后加载。
- 合理的加载顺序:有时不同的配置类之间存在依赖关系,使用 @AutoConfigureAfter 可以确保被注解的类总是在指定的类之后加载,从而避免因加载顺序不当而导致的 Bean 未找到或初始化问题。
- 增强模块的独立性:它使得开发人员可以专注于模块的功能,而不必过多担心其他模块的加载顺序。通过注解声明依赖关系,框架会自动管理这些依赖。
- 用于定制自动配置: 通过指定依赖的自动配置类,可以对特定的 Beans 进行定制,确保这些 Beans 在其他相关 Beans 之后进行配置或修改。
@Accessors(chain = true)
@Accessors(chain = true) 是 Lombok 提供的一个注解,用于简化 Java 类的 getter 和 setter 方法的生成。
- 链式调用支持:当 chain 参数设置为 true 时,Lombok 会生成的 setter 方法返回当前对象(this),而不是 void。这使得可以在设置多个属性时,进行链式调用。
- 自定义命名风格:通过 @Accessors 注解,可以进一步自定义生成的 getter 和 setter 的命名风格