Spring容器默认创建的是单列对象
Spring创建对象的过程是交由Spring的IOC容器进行对象的创建和管理的,其默认创建对象的方式是采用无参构造创建对象。在Spring容器里默认只实例化出一个bean,后续的请求都公用这个对象,这个对象会保存在一个map里面 。当有请求来的时候会先从缓存map里查看有没有,有的话直接使用这个对象,没有的话才实例化一个新的对象,所以这是个单例的。但是对于原型(prototype)bean来说当每次请求来的时候直接实例化新的bean,没有缓存以及从缓存查的过程。
设置Spring创建对象为多列
1.使用@Bean注解的方式向Spring IOC容器中注入对象,注入对象为多列的创建方式。
Student实体类:
public class Student {
private int id;
private String name;
private String adress;
}
注入向Spring IOC容器中注入Student对象:
@Configuration
public class BeanFactory {
@Bean
@Scope("prototype")//加入此注解,实现设置Spring创建对象为多列,不加为默认的单列
public Student student(){
return new Student();
}
}
测试类:
@SpringBootTest
@RunWith(SpringRunner.class)
public class ScopeTest {
//注入对象1
@Autowired
private Student student;
//注入对象2
@Autowired
private Student student1;
@Test
public void getScope(){
System.out.println(student);
System.out.println(student1);
}
}
控制台输出结果:
由输出的对象的HashCode可知,Spring IOC容器生成的是两个不同的对象,即创建的是多列对象。
2.使用@Component注解的方式向将对象的创建交由Spring IOC容器进行管理,注入对象为多列的创建方式。
Student实体类:
@Component
@Scope("prototype")
public class Student {
private int id;
private String name;
private String adress;
}
测试类同上不变。
控制台输出结果:
由输出的对象的HashCode可知,Spring IOC容器生成的是两个不同的对象,即创建的是多列对象。