3

Springで非静的内部クラスを作成するための最良のアプローチは何ですか?

class A {
  public class B {}

  B b;
  public void setB(B b) {this.b = b;}
}

これはうまくいくようですが、コンストラクター引数の必要性を避けたいです:

<bean id="a" class="A">
  <property name="b">
    <bean id="b" class="A$B">
      <constructor-arg ref="a"/>
    </bean>
  </property>
</bean>
4

2 に答える 2

3

ある時点で、外側のオブジェクトを指定する必要がありますが、それを避けることはできません。Aただし、内部を作成するファクトリ メソッドを追加することで、これを Java に移動し、XML から移動できますB

public class A {
  public class B {}

  B b;

  public void setB(B b) {this.b = b;}

  public B createB() {return new B();} // this is new
}

そして、次のことができます:

<bean id="a" class="test.A">
  <property name="b">
    <bean id="b" factory-bean="a" factory-method="createB"/>
  </property>
</bean>

したがって、XML はより単純ですが、Java はより複雑です。Spring は、明らかな循環参照に動揺しないほどスマートです。

どちらかを選ぶ必要があります。

于 2010-01-07T13:27:21.603 に答える
2

内部クラス (非静的) をインスタンス化する場合、外部クラス参照を作成する必要があります。オブジェクト B が A のインスタンスのスコープ内でしか作成できない場合、どうすればそれを回避できるかわかりません。

A.B b = new A().new B

また

A a = new A();
A.B b = a.new B();
于 2010-01-07T07:29:15.493 に答える