通过 Spring 的 bean 注入方式创建对象默认是单实例的
但我们也可以通过配置xml文件来指定通过bean创建的对象是多实例的
默认情况
@Test
public void test7(){
ApplicationContext context = new ClassPathXmlApplicationContext("bean3.xml");
Teacher teacher1 = context.getBean("teacher", Teacher.class);
Teacher teacher2 = context.getBean("teacher", Teacher.class);
System.out.println(teacher1.equals(teacher2));
}
由于没有重写 equals
方法,所以这里调用的就是 Object
类中的equals
方法,也就是对两个对象的地址值进行比较。
可以看出,默认情况下,通过 bean 注入创建的对象就是单实例的。
配置多实例
我们可以通过在xml
中配置bean
的时候,指定其以多实例的方式进行创建对象。
涉及到的就是bean
标签中的scope
属性
- prototype:多实例方式创建对象
- singleton:单实例模式
两者的区别:
- 单例模式下,加载 Spring 配置文件的时候就会创建单实例对象
- 多例模式下,并不是在加载配置文件的时候就创建对象,而是在调用
getBean()
方法的时候才会创建多实例对象。