簡體   English   中英

Spring @Configuration運行時注入

[英]Spring @Configuration runtime injection

在我的非Boot Spring 5項目中,我需要手動注冊並初始化一些bean。 之后,我想向上下文添加一個@Configuration類,該類從外部庫中導入配置:

@Configuration
@Import(ExtLibConfig.class)
public class MyExtLibConfig {

  @Bean
  public ExtLibBean extLibBean() {
   return ExtLibBean.builder().build();
  }

}

ExtLibConfig有許多自己的@ComponentScan@Import ,我希望它們都可以自動配置,包括我的ExtLibBean

在運行時可以這樣做嗎? 當添加手動注冊的bean時 ,外部庫會掃描ApplicationContext ,而我需要這樣做。

UPD :問題不是關於bean注冊順序的實際問題。 擴展庫在刷新后正在掃描ApplicationContext ,因此此時我需要我的bean在那里

解決方案是實現BeanDefinitionRegistryPostProcessor

public class MyMockBeanDefinitioRegistrynPostProcessor implements BeanDefinitionRegistryPostProcessor {

    @Override
    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
        // registry.registerBeanDefinition(mockBeanClass, mockBeanDefinition);...

    }

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        // nothing to do
    }

然后將其聲明為Bean

@Configuration
public class MockBeanConfig {

    @Bean
    public MyMockBeanDefinitioRegistrynPostProcessor mockBeanDefinitionPp() {
        return new MyMockBeanDefinitioRegistrynPostProcessor();
    }

}

並將其添加到上下文中:

AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();

context.register(MockBeanConfig.class);
context.register(MyExtLibConfig.class);

context.refresh();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM