2016-11-11 19 views
2

私は以下のクラス、メインクラス、Bean設定ファイルを持っています。プログラムの結果も示されています。私の質問は、私はこの出力がどのように得られたのか考えていないということですか?私はこのプログラムが出力を出した順序を理解していません。私は、出力の3行目に "classBオブジェクトの構築"がなければならないと考えましたが、結果は "classDオブジェクトの構築がある"ことを示しています。Spring Bean実行順

A級

public abstract class ClassA { 
    private String text; 

    public ClassA(){ 
     System.out.println("- new -"); 
    } 

    public String getText() { 
     return text; 
    } 

    public void setText(String text) { 
     this.text = text; 
    } 

} 

ClassBの

public class ClassB extends ClassA { 
    public void settings(){ 
     System.out.println("Constructing ClassB object"); 
    } 
} 

クラスC

public class ClassC { 
    private List<ClassA> items = new ArrayList<>(); 

    public List<ClassA> getItems(){ 
     return items; 
    } 

    public void setItems(List<ClassA> items) { 
     this.items = items; 
    } 

    public void print(){ 
     String s = "This object contains: "; 
     for(ClassA item : items){ 
      s+= item.getText(); 
     } 
     System.out.println(s); 
    } 
} 

ClassD

public class ClassD extends ClassA { 
    public void settings(){ 
     System.out.println("Constructing ClassD Object"); 
    } 
} 

主な方法は

public class Question1Application { 

    public static void main(String[] args) { 
     //SpringApplication.run(Question1Application.class, args); 
     System.out.println("PREPARE"); 
     ConfigurableApplicationContext context = new  ClassPathXmlApplicationContext("springconfig.xml"); 
     System.out.println("BEGIN"); 
     ClassB classB = context.getBean("objectB",ClassB.class); 
     ClassC classC = context.getBean("objectF",ClassC.class); 
     System.out.println("END"); 
     context.close(); 
    } 
} 

豆の設定ファイルが

?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 

<bean id="objectA" class="com.example.ClassA" abstract="true"> 
    <property name="text" value="Things!"></property> 
</bean> 

<bean id="objectB" class="com.example.ClassB" scope="prototype" parent="objectA" 
    init-method="settings"> 
</bean> 

<bean id="objectC" class="com.example.ClassD" scope="prototype" parent="objectA" 
    init-method="settings"> 
</bean> 

<bean id="objectD" class="com.example.ClassD" lazy-init="true" parent="objectA" 
    init-method="settings"> 
</bean> 

<bean id="objectE" class="com.example.ClassD" parent="objectA" init-method="settings"></bean> 

<bean id="objectF" class="com.example.ClassC" init-method="print"> 
    <property name="items"> 
     <list> 
      <ref bean="objectB"></ref> 
      <bean class="com.example.ClassB"> 
       <property name="text" value="lot of things!"></property> 
      </bean> 
     </list> 
    </property> 
</bean> 

であるプログラムの出力は次のとおりです。

PREPARE 
-new- 
constructing classD object 
-new- 
constructing classB object 
-new- 
This object contains : lots of things! 
BEGIN 
-new- 
constructing classB object 
END 
+0

が広すぎます。まさにあなたは混乱しているのですか? – Andrew

+0

なぜcom.example.ClassDを複数回、つまりobjectC&othersにマッピングしましたか? – developer

+0

このプログラムが出力を出した順序を理解できません。私は出力の3行目に "classBオブジェクトの構築"が必要だと考えましたが、結果は "クラスDオブジェクトの構築があります"と表示されます –

答えて

3

例もシングルトンの違いを示していますおよびプロトタイプスコープ

のインスタンスがすぐに作成されます。コンテキストが起動され、IOCコントローラはライフサイクル全体をサポートする必要があります。 シングルトンとは対照的に

は、プロトタイプ範囲のために、コンテナは、私たちの需要により、インスタンスを作成します。 1つの要求 - コンテキストから新しい適切に構成されたオブジェクトが作成されます。コンテナは、捨てられた後、彼らのことを考えなくなるようなタイプの豆を世話しません。、単純にそれを置くのは、それぞれの文を通過させるために

  1. PREPARE - コンテキストのスタートアップ - singleton initialisations
  2. constructing classD objectの始まり - それはシングルトン
  3. constructing classB objectある - objectFがシングルトンでありますそれを初期化するためにClassBインスタンスを作成する必要があります。
  4. BEGIN - すべてのシングルトンがブートストラップされています
  5. constructing classB object - による遅延初期化についてcontext.getBean("objectB",ClassB.class);

へ:

2つのClassDシングルトンと、彼らは起動時にコンテナによって初期化する必要があるが、それらの最後はlazy-init="false"でマークされている可能性があります。そのような動作を防止します。ところで、コンパイル時のエラー検出は、ランタイム中のエラー検出より常に優れているため、推奨される方法ではありません。

+0

私は私の答えを得た。どうもありがとうございました 。 –

関連する問題