【发布时间】:2016-05-03 16:19:19
【问题描述】:
我有一个 Spring 3.0.7 应用程序,我必须在其中用 Java 而不是 xml 初始化一些 bean。我试图弄清楚为什么无法从应用程序上下文中检索我初始化的 bean。
当下面的代码执行时,当我调用 beanFactory.getBean("beanName") 时,我得到“org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'beanName' is defined”。
public class BeanToCreateBeans implements ApplicationContextAware {
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
AutowireCapableBeanFactory beanFactory = applicationContext.getAutowireCapableBeanFactory();
BeanObject bean = new BeanObject();
beanFactory.initializeBean(bean, "beanName");
System.out.println("bean in the application: " + beanFactory.getBean("beanName"));
}
}
为什么创建后无法检索bean?我需要能够创建 bean 并将其添加到应用程序上下文中。
更新:正如答案所述,我的代码实际上并没有注册 bean,它回答了我提出的问题。所以,为了让我的代码按照我想要的方式工作,它看起来像:
public class BeanToCreateBeans implements BeanDefinitionRegistryPostProcessor, ApplicationContextAware {
private ApplicationContext applicationContext;
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry bdr) throws BeansException {
BeanDefinition definition = new RootBeanDefinition(BeanObject.class);
bdr.registerBeanDefinition("beanName", definition);
AutowireCapableBeanFactory beanFactory = applicationContext.getAutowireCapableBeanFactory();
BeanObject bean = new BeanObject();
beanFactory.initializeBean(bean, "beanName");
System.out.println("bean in the application: " + beanFactory.getBean("beanName"));
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
}
【问题讨论】:
-
您能补充一下您是如何创建该 bean 的吗?
-
正如您在代码中看到的那样——创建一个 POJO,然后在 beanFactory 中对其进行初始化。
-
那不是注册bean