初始化具有内部类类型字段的bean

时间:2015-11-04 14:05:15

标签: java spring inner-classes

我有一个带有范围单例的Spring bean。我想注入一个bean,它是其内部类的实例。我希望它也是单身人士。为此,我通过注释配置将外部类定义为Spring bean,并通过简单的构造函数调用初始化内部类的字段。我的问题是: 这是正确的做法吗? 2.当创建单例A时,字段B是否仅在上下文启动时填充一次?

@Service
public class A {

  private B b = new B();

  private class B() {
     public B(){}
  }

}

1 个答案:

答案 0 :(得分:1)

粘贴的代码甚至无法编译,但无论如何一般概念都没有错:Spring bean是由Spring容器创建和管理的对象,它们仍然遵守Java语言和运行时的所有规则。

当Spring构造一个类型为A的bean时,运行实例初始化程序,它会创建一个类型为B的对象(它有一个指向封闭实例的链接),并最终将引用存储到A:

字段中的此类对象
@Service
public class A {
  private B b = new B();
  private class B {}
}

那就是说,我不喜欢内部类:有时候它们会很有帮助,让你的代码更易于阅读和推理,但在这种情况下,你只需要一个B实例,B构造函数为零参数,也许它只是一组方法,由于某种原因你想要自己放入一个类定义