通过 Spring 的 bean 注入方式创建对象默认是单实例
但我们也可以通过配置xml文件来指定通过bean创建的对象是多实例的

默认情况

  1. @Test
  2. public void test7(){
  3. ApplicationContext context = new ClassPathXmlApplicationContext("bean3.xml");
  4. Teacher teacher1 = context.getBean("teacher", Teacher.class);
  5. Teacher teacher2 = context.getBean("teacher", Teacher.class);
  6. System.out.println(teacher1.equals(teacher2));
  7. }

由于没有重写 equals 方法,所以这里调用的就是 Object类中的equals方法,也就是对两个对象的地址值进行比较。
可以看出,默认情况下,通过 bean 注入创建的对象就是单实例的。

image.png

配置多实例

我们可以通过在xml中配置bean的时候,指定其以多实例的方式进行创建对象。
涉及到的就是bean标签中的scope属性
image.png

  1. prototype:多实例方式创建对象
  2. singleton:单实例模式

两者的区别:

  1. 单例模式下,加载 Spring 配置文件的时候就会创建单实例对象
  2. 多例模式下,并不是在加载配置文件的时候就创建对象,而是在调用 getBean() 方法的时候才会创建多实例对象。