2016-05-03 3 views
0

私は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; 
    } 
} 
+0

ラップのいずれかが、あなたはそのBeanを作成する方法を追加することはできますか? – TheNorthWes

+0

[Spring Web App ContextにプログラムでBeanを追加する]の可能な複製(0120-1775-100) – TheNorthWes

+0

POJOを作成した後、beanFactoryでPOJOを初期化します。 – mongiesama

答えて

1

AutowireCapableBeanFactory#initializeBean(Object, String)は、コンテキストまたはBeanの工場にBeanを追加しません。 Javadocは

も(与えられた生豆を包むかもしれないものを含む)すべてのBeanポストプロセッサ を適用し、工場出荷時のコールバックなど setBeanNameとsetBeanFactoryを適用し、与えられた生豆を初期化述べています。

基本的には、ApplicationContextの一部として初期化されたBeanのように渡すオブジェクトを処理します。このメソッドは、初期化の結果であるObjectを返します。

戻り値: Beanインスタンスを使用するには、オリジナルまたは1

関連する問題