当前位置: 首页 > 知识库问答 >
问题:

通过读取springboot starter模块中的配置来动态注册beans

轩辕风华
2023-03-14

我有一个springboot starter模块,它正在读取一个配置文件,并使用它来尝试构建一个任意类型的新bean,并将它们添加到bean工厂中。

@Configuration
class SomeConfig implements BeanFactoryAware {

    BeanFactory beanFactory 

    @Autowired
    ConfigData configData

    @Override
    void setBeanFactory(BeanFactory beanFactory) {
         this.beanFactory = beanFactory      
    }

    @PostConstruct
    void addMoreBeans() {
        ConfigurableBeanFactory configurableBeanFactory = (ConfigurableBeanFactory) beanFactory
        configurableBeanFactory.registerSingleton('someObject', new SomeObject())
    }   
}


@RestController //( in the application )
class SomeController {
   @Autowired
   SomeObject someObject // this is null.
}

当我试图访问spring boot应用程序(在一个控制器bean中)中的“SomeObject”类型的bean时,它使用了包含上述配置bean的starter模块,但没有自动连接。

我可以看到,它稍后在启动过程中初始化这些bean,但没有及时让autowire工作。

是否需要强制启动器模块中的bean首先初始化?

共有1个答案

容俊豪
2023-03-14

addMore Beans可以在setBeanWorks运行之前运行。

因此,您可以按如下方式编写代码:

@Configuration
class SomeConfig implements BeanFactoryAware {

    BeanFactory beanFactory 

    @Autowired
    ConfigData configData

    @Override
    void setBeanFactory(BeanFactory beanFactory) {
        this.beanFactory = beanFactory
        beanFactory.registerSingleton('someObject', new SomeObject()    
    }
}

@Bean可能是更好的方法。

@Configuration
class SomeConfig2 {
    @Bean
    public SomeObject getSomeObject() {
        return new SomeObject();
    }
}
 类似资料:
  • “刚上手Seata,对其各个模块了解还不够深入? 想深入研究Seata源码,却还未付诸实践? 想探究下在集成Seata后,自己的应用在启动过程中“偷偷”干了些啥? 想学习Seata作为一款优秀开源框架蕴含的设计理念和最佳实践? 如果你有上述任何想法之一,那么今天这篇文章,就是为你量身打造的~ 前言 在Seata的应用侧(RM、TM)启动过程中,首先要做的就是与协调器侧(TC)建立通信,这是Seat

  • 本文向大家介绍Oracle Listener 动态注册 与 静态注册,包括了Oracle Listener 动态注册 与 静态注册的使用技巧和注意事项,需要的朋友参考一下 一.什么是注册 注册就是将数据库作为一个服务注册到监听程序。客户端不需要知道数据库名和实例名,只需要知道该数据库对外提供的服务名就可以申请连接到数据库。这个服务名可能与实例名一样,也有可能不一样。   在数据库服务器启动过程中,

  • 本文向大家介绍详解Python读取配置文件模块ConfigParser,包括了详解Python读取配置文件模块ConfigParser的使用技巧和注意事项,需要的朋友参考一下 1,ConfigParser模块简介 假设有如下配置文件,需要在Pyhton程序中读取 如何在Python中读取呢 2,ConfigParser模块的基本方法介绍 读取配置文件 写入配置文件 3,特殊情况 如果有以下配置文件

  • (https://github.com/confluentinc/schema-registry/blob/5af0ca3be1138fe483d0f90f4ccfd4f02f158334/core/src/main/java/io/confluent/kafka/schemaregistry/storage/kafkaschemaregistry.java#l211-l223) 因此,通告端口的

  • 本文向大家介绍Oracle静态注册与动态注册详解,包括了Oracle静态注册与动态注册详解的使用技巧和注意事项,需要的朋友参考一下 一、概述:   Oracle的注册就是将数据库作为一个服务注册到监听程序。客户端不需要知道数据库名和实例名,只需要知道该数据库对外提供的服务名就可以申请连接到这个数据库。这个服务名可能与实例名一样,也有可能不一样。   在数据库服务器启动过程中,数据库服务器会向监听程

  • 我的笔记本电脑上安装了ubuntu。 我启动了一个私有docker注册表(支持ssl的htpasswd安全),并将其添加到覆盖网络上(因此可以从其他主机/虚拟机访问) 以下是代码(docker-compose.yaml): 因此,我的注册表正在以下链接中运行(通过dns,我可以在浏览器中进行验证):https://home-thinkpad-t420s:5000/v2/_catalog 现在我在笔