0

私は比較的新しい Spring ユーザーであり、このフレームワークを使用して複雑なネストされた構成をロードすることに興味があります。

以下は、私のアーキテクチャ設計の疑似コードです。

   class **A** implements runnable{
      int x;
      Collection<**B**> clist;         //not fixed size list, 
      run(){
           // if (something happens) 
           //           new Thread(**B**(y,z,w))
      }
   } 

   class **B** implements runnable{
      int y;
      int z;
      int w;
      Array<**C**> bclist;            // fixed size array of C known at init time
      run(){
           process...
      }
   } 

   class **C**{
      int v;
      int l;
   }

Ax、By、Bz、Bw、B.clist、Cv、および Cl を構成できる必要があります。

新しいスレッドごとに B の初期化に関連する 1 つの問題があります。コンパイル時に clist が空のままかどうかはわかりません。実行時にのみ、作成されるスレッドの数がわかります。新しいスレッドごとに、同じ構成で新しい B を作成します。

(オートワイヤーとプロトタイプ機能を調べましたが、何らかの形で役立つのではないかと思います)

編集

ここにxmlサンプルファイルがあります:

            <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
            <beans>
                <bean id="A" class="...">
                    <property name="x" value="150" />
                    <!-- HERE IS MY PROBLEM-->

                    <property name="clist">
                        <list>
                            <ref bean="B" />
                        </list>
                </bean>

                <bean id="B" class="...">
                    <property name="y" value="20" />
                    <property name="z" value="7" />
                    <property name="w" value="7" />
                    <property name="bclist">
                        <list>
                            <ref bean="C" />
                        </list>
                </bean>

                <bean id="C" class="...">
                    <property name="v" value="3" />
                    <property name="l" value="1" />
                </bean>
            </beans>
4

1 に答える 1

0

この問題の解決策はありますが、最適ではない可能性があります。

xml の A Bean では、clist の設定をコメントアウトすることができます (構造にはまったく含めません)。

Java コードで B Bean を作成するときは、xml で B Bean をプロトタイプとして定義しながら、毎回 getBean("B") を使用することがあります。

このような :

            <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
            <beans>
                <bean id="A" class="...">
                    <property name="x" value="150" />
                </bean>

                <bean id="B" class="..." scope="prototype">
                    <property name="y" value="20" />
                    <property name="z" value="7" />
                    <property name="w" value="7" />
                    <property name="bclist">
                        <list>
                            <ref bean="C" />
                        </list>
                </bean>

                <bean id="C" class="...">
                    <property name="v" value="3" />
                    <property name="l" value="1" />
                </bean>
            </beans>

Java コード:

  class **A** implements runnable{
    int x;
    Collection<**B**> clist;         //not fixed size list, 
    run(){
       // if (something happens) 
       //           new Thread((B)context.getBean("B"))
    }
  } 
于 2012-08-27T09:46:19.533 に答える