gpt4 book ai didi

java - 访问 BeanDefinitionRegistryPostProcessor 内部的 Spring ApplicationContext

转载 作者:行者123 更新时间:2023-11-30 02:01:14 25 4
gpt4 key购买 nike

如何访问 BeanDefinitionRegistryPostProcessor (BDRPP) 内部的 ApplicationContext?我有以下 BDRPP。

public class MyCustomBeansFactoryPostProcessor implements BeanDefinitionRegistryPostProcessor {

@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
// Need to access ApplicationContext here
System.out.println("Got Application Context: " + applicationContext);
}

@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
}
}

尝试添加@Autowired,甚至使我的CustomBDRPP实现ApplicationContextAware,但ApplicationContext未注入(inject)/初始化。

public class MyCustomBeansFactoryPostProcessor implements BeanDefinitionRegistryPostProcessor, ApplicationContextAware {

//@Autowired
private ApplicationContext applicationContext;

public void setApplicationContext(ApplicationContext context) {
applicationContext = context;
}

@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
System.out.println("Got Application Context: " + applicationContext);
}

@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
}
}

输出:

Got Application Context: null

如何实现这一目标?

最佳答案

我有一个类似的任务,并将 BDRPP 声明为 Bean 有效:

public class MyCustomBdrpp implements BeanDefinitionRegistryPostProcessor {

private ApplicationContext context;

private MyCostomBdrpp(ApplicationContext context) {
this.context = context;
}

@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
//foo
}

@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
//bar
}
}

然后:

@Configuration
class MyConfig {

@Bean
public MyCustomBdrpp myBdrpp(@Autowired ApplicationContext context) {
return new MyCustomBdrpp(context);
}

}

但我需要说我正在手动创建上下文:

AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.register(MyConfig.class);
context.refresh();

关于java - 访问 BeanDefinitionRegistryPostProcessor 内部的 Spring ApplicationContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52769690/

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