gpt4 book ai didi

java - Spring @Configuration 运行时注入(inject)

转载 作者:搜寻专家 更新时间:2023-11-01 03:31:11 25 4
gpt4 key购买 nike

在我的非Boot Spring 5 项目中,我需要手动注册和初始化一些bean。 在那之后我想在上下文中添加一个@Configuration 类,它从外部库导入配置:

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

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

}

ExtLibConfig有很多自己的@ComponentScan@Import,我希望它们都自动配置,包括我的ExtLibBean.

是否可以在运行时这样做?外部库扫描 ApplicationContext,我需要它这样做,当我手动注册的 bean 添加时

更新:关于 bean 注册顺序的问题不是实际的。 ext lib 在刷新后正在扫描 ApplicationContext,所以此时我需要我的 beans 在那里

最佳答案

解决方案是实现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();

关于java - Spring @Configuration 运行时注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54213353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com