Java 为什么程序创建的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并将其添加到应

我有一个Spring3.0.7应用程序,其中我必须用Java而不是xml初始化一些bean。我试图弄明白为什么我初始化的bean不能从应用程序上下文中检索

当下面的代码执行时,当我调用beanFactory.getBean(“beanName”)时,我得到“org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义名为“beanName”的bean”

为什么创建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;
    }
}