Java 为什么程序创建的bean在应用程序上下文中不可用
我有一个Spring3.0.7应用程序,其中我必须用Java而不是xml初始化一些bean。我试图弄明白为什么我初始化的bean不能从应用程序上下文中检索 当下面的代码执行时,当我调用beanFactory.getBean(“beanName”)时,我得到“org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义名为“beanName”的bean” 为什么创建bean后不能检索它?我需要能够创建bean并将其添加到应用程序上下文中 更新:正如答案所述,我的代码实际上没有注册bean,这回答了我提出的问题。因此,为了使我的代码按我想要的方式工作,它看起来像:Java 为什么程序创建的bean在应用程序上下文中不可用,java,spring,Java,Spring,我有一个Spring3.0.7应用程序,其中我必须用Java而不是xml初始化一些bean。我试图弄明白为什么我初始化的bean不能从应用程序上下文中检索 当下面的代码执行时,当我调用beanFactory.getBean(“beanName”)时,我得到“org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义名为“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工厂添加bean。javadoc声明
初始化给定的原始bean,应用工厂回调,例如
setBeanName和setBeanFactory,也应用所有bean后处理器
(包括那些可能包装给定生豆的)
它基本上只是处理您传递给它的对象,就好像它是作为ApplicationContext
的一部分初始化的bean一样。请注意,该方法返回一个对象
,这是初始化的结果
返回:
要使用的bean实例,可以是原始实例,也可以是包装的实例
你能添加你是如何创建这个bean的吗?可能与你在代码中看到的一样-创建一个POJO,然后在beanFactory中初始化它。这不是注册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;
}
}