1

当一个 bean 被自动装配时,它是否会创建该类的多个实例?

这是一个例子;

public class ClassA {

  @Autowired
  private ClassB classB;

  public ClassB getClassB() {
    return classB;
  }

  public void setClassB(ClassB classB) {
    this.classB = classB;
  }

  // using ClassB in method 1
  public void useClassBmethod1() {
    // currently using autowired ClassB instance
    classB.doSomething();
  }

  // using ClassB in method 2
  public void useClassBMethod2() {
    // need a new instance of ClassB but through the same autowired bean
    ClassB classb = getClassB();
  }
}

public class ClassB {


  public void doSomething() {}
}

所以我的问题是,自动装配 bean 是否知道如何在需要时创建新的 bean 实例,或者这留给程序员来破译?

感谢您的帮助。

4

3 回答 3

3

它取决于bean标签的属性范围。如果scope="singleton"默认情况下,那么每次您将获得单个实例,如果scope="prototype"您将获得不同的实例。而且它不依赖于自动装配。

 <bean class="ClassB" scope="prototype">
于 2013-11-05T09:57:37.673 回答
1

通过使用@Autowired您指示类加载器将容器中可用的任何类实例与被调用者相关联。您需要确保在配置文件中创建了一个条目来实例化 bean,例如<bean id="test" class="xxx.Test" />. 此外,您可能还想检查范围。

如果您有多个使用不同名称定义的同一类的实例,那么@Autowired您需要提供要在限定符的帮助下使用的特定名称。

于 2013-11-05T10:01:05.253 回答
0

默认情况下,所有 bean 都是单例的,因此只会创建一个实例,更多关于范围http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/beans.html#beans-factory -方法注入

于 2013-11-05T09:59:27.073 回答