私はxmlではなくJavaでいくつかのBeanを初期化する必要があるSpring 3.0.7アプリケーションを持っています。私は、私が初期化したBeanをアプリケーションコンテキストから取り出すことができない理由を理解しようとしています。プログラムで作成されたbeanがアプリケーションコンテキストで利用できないのはなぜですか?
以下のコードを実行すると、 "org.springframework.beans.factory.NoSuchBeanDefinitionException:beanFactory.getBean(" beanName ")を呼び出すと 'beanName'が定義されていません。
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を作成する方法を追加することはできますか? – TheNorthWes
[Spring Web App ContextにプログラムでBeanを追加する]の可能な複製(0120-1775-100) – TheNorthWes
POJOを作成した後、beanFactoryでPOJOを初期化します。 – mongiesama