超越竞争:Spring Boot如何在加载bean时优先选择我?

这篇具有很好参考价值的文章主要介绍了超越竞争:Spring Boot如何在加载bean时优先选择我?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

超越竞争:Spring Boot如何在加载bean时优先选择我?

🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

引言

Spring Boot 是当前业界最受欢迎和广泛使用的 Java Web 应用开发框架之一。在 Spring Boot 应用中,bean
是通过自动配置进行装载的,因为其按照约定顺序位置,Spring Boot
希望尽可能提供正确的自动配置,在应用运行时重写或自定义扩展。这样,bean
的优先级可以在应用程序的所有层次结构中管理。如果我们需要在应用程序启动时优先加载某些 bean,那么本文就是为大家详细介绍如何实现。

一、适用场景

  • 如果我们需要在应用程序的所有层次结构中对特定 bean 的启动顺序进行管理。例如,需要在应用程序启动的时候初始化某个bean。
  • 如果我们公共库中的 bean 被其他开发者服务用到,但是他们需要在部分场景下自定义 bean,则我们需要在这些自定义的 bean前面先加载公共库中的 bean。

二、三种实现方式

在 Spring Boot 应用程序中,我们可以采取以下三种方式实现自己的 bean 优先加载:

1. @Configuration 注解 + @DependsOn 注解

@Configuration 注解在 Spring Boot 应用程序中声明 bean 并允许我们指定 bean 的优先级。然后,我们可以使用 @DependsOn 注解明确地告诉 Spring 容器这些 bean 应该在应用程序的哪一阶段被加载。

使用方法如下:

(1) 声明 @Configuration 注解以及使用 @DependsOn 注解并且确保引用的 bean 已经存在(可以是其他的 bean 或配置类)。

@Configuration 
@DependsOn("myOrderBean") 
public class MyOrderedBeanConfig {
   // 配置类内普通Bean
   @Bean
   public MyBean myBean() {
      return new MyBean();
   }
}

(2) 将 @Configuration 注解引入到 Spring Boot 应用程序中,以便在应用程序启动时执行。

@SpringBootApplication
@Import(MyOrderedBeanConfig.class)
public class DemoApplication {
   public static void main(String[] args) {
      SpringApplication.run(DemoApplication.class, args);
   }
}

2. @Component 注解 + @DependsOn 注解

@Component 注解是最快速的声明 bean 的方法之一,并允许我们指定 bean 的名称。如果我们希望已有的 bean 在应用程序启动时首先被加载,那么我们可以使用 @DependsOn 注解来实现。当指定多个 bean 时,可以使用逗号来分隔。

使用方法如下:

(1) 在使用 @Component 注解的类中,使用 @DependsOn 注解来明确指定 bean 的加载顺序。

@Component("myBean") 
@DependsOn({"bean1", "bean2"}) 
public class MyBean {
   // ...
}

(2) 将 @Component 注解引入到 Spring Boot 应用程序中,以便在应用程序启动时执行。

@SpringBootApplication 
@ComponentScan(basePackages = "com.example.demo") 
public class DemoApplication {
   public static void main(String[] args) {
      SpringApplication.run(DemoApplication.class, args);
   }
}

3. 实现 PriorityOrdered 接口

实现 PriorityOrdered 接口并实现 getOrder() 方法可以使我们控制 bean 的加载顺序。最后,我们可以使用 BeanPostProcessor 接口来确保这些 bean 第一次生成时被加载。

使用方法如下:

(1) 实现 PriorityOrdered 接口,并使用 getOrder() 方法返回一个正整数以指定 bean 的优先级。该数值越小,优先级越高。

public class MyBean implements InitializingBean, PriorityOrdered {
   public void afterPropertiesSet() {
       // ...
   }
   public int getOrder() {
      return 0; // 这个值将确保此 bean 被最先加载
   }
}

(2) 提供 BeanPostProcessor 实例,并用 @Order 注解指定顺序。在 Spring 容器的生命周期中,此实例将在所有常规 bean 之前执行。

@Component 
@Order(value = 1) 
public class MyBeanPostProcessor implements BeanPostProcessor {
   // ...
}

(3) 将 @ComponentScan 注解引入到 Spring Boot 应用程序中,以便在应用程序启动时执行。

@SpringBootApplication 
@ComponentScan(basePackages = {"com.example.demo"}) 
public class DemoApplication {
   public static void main(String[] args) {
      SpringApplication.run(DemoApplication.class, args);
   }
}

注意事项文章来源地址https://www.toymoban.com/news/detail-403913.html

  • 在应用程序中使用上述方式之一都能够帮助您管理 bean 的优先级,但这并不意味着其优先级不会被其他 bean 覆盖。
  • 如果想覆盖先前声明的 bean,可以使用相应技术栈的高优先级 bean 来覆盖先前声明的 bean。
  • 可以在所有 bean 上使用 @Order 注解或实现 Ordered 接口来实现 bean 的排序。
  • 使用多个技术栈时,可以混合使用这些技术栈来达到目的。

四、参考资料

  1. Spring Boot 官方文档: Controlling Startup Behaviour of Spring BootApplication
  2. Spring 官方文档: Prioritized Bean Applicatons
  3. Medium: Order execution with Spring Boot
  4. Baeldung: Bean Order in Spring

到了这里,关于超越竞争:Spring Boot如何在加载bean时优先选择我?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Boot如何实现配置文件的自动加载和刷新?

    在使用Spring Boot开发应用程序时,配置文件是非常重要的组成部分。在不同的环境中,我们可能需要使用不同的配置文件,例如在开发、测试和生产环境中使用不同的配置文件。而且,当我们更改配置文件时,我们希望应用程序能够自动加载和刷新配置文件,而无需重启应用

    2024年02月07日
    浏览(50)
  • Spring Boot配置文件:properties 与 yml 的竞争

    本文,我们就要来介绍一下Spring Boot中的配置文件 ,在学习了本文之后,可以很清楚地知道如何在Spring Boot中去配置项目的一些系统设置 首先我们先来聊聊什么是配置文件? 配置文件是一种 文本文件 ,通常用于存储程序的参数和设置。它包含了程序运行所需的各种选项和配

    2024年02月04日
    浏览(51)
  • Spring中Bean加载流程

    BeanDefinition 1.1什么是BeanDefinition? 1.2 BeanDifinition中重要的属性 1.3 BeanDefinition的解析 BeanFactory 2.1 什么是BeanFactory? 2.2 BeanFactory工作流程: Bean生命周期 3.1 什么是Bean生命周期? Bean生命周期是Spring中一个Bean创建过程和销毁过程中所经历的步骤,其中Bean创建过程是重点。 3.2 核

    2024年02月09日
    浏览(28)
  • 【Spring Boot】什么是深度优先遍历与广度优先遍历?用Spring Boot项目举例说明。

    深度优先遍历(Depth First Search,DFS)和广度优先遍历(Breadth First Search,BFS)是图的遍历算法。其中,深度优先遍历从某个起始点开始,先访问一个节点,然后跳到它的一个相邻节点继续遍历,直到没有未遍历的节点,此时回溯到上一个节点,继续遍历其他的相邻节点。而广

    2024年02月11日
    浏览(25)
  • 【微服务】spring 控制bean加载顺序使用详解

    目录 一、前言 二、使用@order注解控制顺序 2.1 @order 注解使用示例 2.2 order注解顺序失效问题

    2024年02月08日
    浏览(27)
  • 面试篇-揭开Spring Bean加载的神秘面纱

      启动spring容器(创建beanfactory)-加载配置(注解、xml)-实例化bean(执行构造方法)-注入依赖-初始化bean(设置属性值)-使用-销毁 解析和读取 XML 配置文件或注解配置类,获取 Bean 定义信息。 根据 Bean 定义信息实例化 Bean 对象。根据不同的作用域(如 singleton、prototype 等),S

    2023年04月17日
    浏览(36)
  • 【Spring Boot Bean 注入详解】

    什么是 Bean 注入? 在 Spring 中,Bean 是应用程序的核心构建块。Bean 是由 Spring IoC 容器管理的对象,通过依赖注入实现对象之间的解耦。 Spring Boot 中的 Bean 注入 在 Spring Boot 中,Bean 注入通常通过 @Autowired 、 @Component 、 @Service 、 @Repository 等注解实现。 @Autowired 用于自动装配

    2024年02月21日
    浏览(31)
  • 【Spring boot 普通类调用 Bean】

    Spring boot 普通类调用 Bean 我们知道如果我们要在一个类使用 spring 提供的 bean 对象,我们需要把这个类注入到 spring 容器中, 交给 spring 容器进行管理,但是在实际当中,我们往往会碰到在一个普通的 Java 类中,想直接使用 spring 提供的其他对象 或者说有一些不需要交给 spri

    2023年04月22日
    浏览(29)
  • Spring的加载配置文件、容器和获取bean的方式

    🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaweb 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 properties文件: jdbc.properties 1.开启context命名空间 2.使用context命名空间,加载指定properties文件 3.使用属性占位符 ${} 读取properties文件中的属性 properties文件

    2024年02月15日
    浏览(30)
  • JavaWeb开发06-原理-Spring配置优先级-Bean管理-SpringBoot原理-Maven继承和聚合-私服

    不同配置文件,配置同一个属性谁有效 propertiesymlyaml 命令行参数Java系统属性 项目打包后要改变属性: 红色是Java系统属性,绿色是命令行参数 ‘ 获取IOC容器:applicationContext就是IOC容器对象 IOC容器中bean是默认单例的只有一个,这样三个获取的bean是同一个 单例还是多例取决

    2024年04月23日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包