java如何获得将在春季创建的bean集?
下面是一个场景:
我有一个SpringXML配置,其中包括一些惰性bean、一些非惰性bean和一些依赖于其他bean的bean。最终,Spring将解决所有这些问题,以便只创建要创建的bean
问题是:我如何通过编程来判断这个集合是什么
当我使用context.getBean(name)
初始化bean时BeanDefinition.isLazyInit()
只会告诉我如何定义bean
还有其他想法吗
预计到达时间:
在DefaultListableBeanFactory
中:
public void preInstantiateSingletons() throws BeansException {
if (this.logger.isInfoEnabled()) {
this.logger.info("Pre-instantiating singletons in " + this);
}
synchronized (this.beanDefinitionMap) {
for (Iterator it = this.beanDefinitionNames.iterator(); it.hasNext();) {
String beanName = (String) it.next();
RootBeanDefinition bd = getMergedLocalBeanDefinition(beanName);
if (!bd.isAbstract() && bd.isSingleton() && !bd.isLazyInit()) {
if (isFactoryBean(beanName)) {
FactoryBean factory = (FactoryBean) getBean(FACTORY_BEAN_PREFIX + beanName);
if (factory instanceof SmartFactoryBean && ((SmartFactoryBean) factory).isEagerInit()) {
getBean(beanName);
}
}
else {
getBean(beanName);
}
}
}
}
}
可实例化bean集已初始化。初始化此集合时,也将创建此集合引用的不在此集合中的任何bean。从来源来看,似乎没有任何简单的方法来回答我的问题
# 1 楼答案
到目前为止,我的解决方案是:
ExtendedApplicationContext
实现ApplicationContextAware
ExtendedApplicationContext
的静态实例上调用initialized(this)
ExtendedApplicationContext
中创建初始化bean集合欢迎提出更好的建议
# 2 楼答案
这可能是最好的方法,使用
BeanPostProcessor
:然后,您所要做的就是将其作为bean包含在Spring配置中的某个地方,以使其工作