autowired bean的多个实例

时间:2013-11-05 09:51:54

标签: spring

当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的新实例,或者由程序员解密?

感谢您提供帮助。

3 个答案:

答案 0 :(得分:3)

这取决于bean标签的属性范围。如果默认情况下为scope="singleton",则每次获得单个实例,如果scope="prototype",则会获得不同的实例。它不依赖于autowire。

 <bean class="ClassB" scope="prototype">

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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