【问题标题】:creating inner classes with spring用spring创建内部类
【发布时间】:2010-01-07 07:25:17
【问题描述】:

在 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>

【问题讨论】:

  • 不需要避免那么多代码..
  • 不,但它会导致错误并且令人困惑

标签: java spring inner-classes


【解决方案1】:

在某些时候,您需要指定外部对象,这是无法避免的。但是,您可以通过将工厂方法添加到 A 来创建内部 B,从而将其移入 Java 并移出 XML:

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 足够聪明,不会对明显的循环引用感到不安。

任你选,你需要做一个或另一个。

【讨论】:

    【解决方案2】:

    当您实例化一个内部类(非静态)时,您需要外部类引用来创建一个。当对象 B 只能在 A 的实例范围内创建时,我不明白如何避免它。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-15
      • 2015-03-14
      • 1970-01-01
      • 2011-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多