3
ClassPathXmlApplicationContext ct = new ClassPathXmlApplicationContext();

ct.refresh();
ConfigurableListableBeanFactory bf = ct.getBeanFactory();

Ad bean = (Ad) bf.createBean(Ad.class);
System.out.println("bean ="+bean);  
System.out.println("size= "+bf.getBeansOfType(Ad.class).size()); // print  0

Ad クラス、ここに Ad クラス情報があります。AD は AbstractAd クラスを拡張します:

public class Ad {

 @Override
   public String toString() {
       return "ad[adid=" + this.getId() + "]";
   }

}

ここにログがあります:

[DEBUG] Creating instance of bean 'com.Ad'
[DEBUG] Finished creating instance of bean 'com.Ad'
bean = ad[adid=null]
size= 0

私の意見では、サイズは 1 である必要がありますが、何が問題なのですか?

ps:最後に GenericApplicationContext と BeanDefinition を使用し、 createBean を成功させて From context を取得します。

   GenericApplicationContext ct = new GenericApplicationContext();

    ct.refresh();

    ConfigurableListableBeanFactory bf = ct.getBeanFactory();
    System.out.println("--------------start------------/n--------------------------/n-------------------/n");

    BeanDefinition definition = new RootBeanDefinition(Ad.class);
     ct.registerBeanDefinition("sampleService", 
    System.out.println(bf.getBeansOfType(Ad.class).size()); //print 1

ログ:

[DEBUG] Creating instance of bean 'sampleService'
[DEBUG] Eagerly caching bean 'sampleService' to allow for resolving potential circular    references
[DEBUG] Finished creating instance of bean 'sampleService'
1

しかし、私はまだ疑問に思っています:なぜ getBeansOfType(Ad.class).size() はClassPathXmlApplicationContext creteBean の後に 0 ですか?

4

1 に答える 1

2

ClassPathXmlApplicationContext では、XML を渡していません。Spring 構成 xml を渡すと、期待される結果が表示されます。またAd bean = (Ad) bf.createBean(Ad.class);、クラスのみの Bean を作成します。しかし、それは小枝のコンテキストに追加されません。

2 番目のコードでは、registerBeanDefinition メソッドを使用して Bean を登録しています。そのようにして、結果を期待することが示されています。

次のコードを試してみましたが、動作します

ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("/Beans.xml");
        classPathXmlApplicationContext.refresh();
        ConfigurableListableBeanFactory beanFactory = classPathXmlApplicationContext.getBeanFactory();
        System.out.println(beanFactory.getBeansOfType(HelloWorld.class).size());
于 2013-03-29T07:46:59.790 に答える