前言:创建Java对象
1 public class User {
2 private String name;
3 private Integer age;
4
5 public User() {
6 System.out.println("这是空参构造");
7 }
8
9 public String getName() {
10 return name;
11 }
12
13 public Integer getAge() {
14 return age;
15 }
16
17 public void setName(String name) {
18 this.name = name;
19 }
20
21 public void setAge(Integer age) {
22 this.age = age;
23 }
24 }
1.默认情况--容器创建,容器管理的bean即被实例化
1 public class Demo {
2 @Test
3 public void run(){
4 //1.创建容器对象
5 ApplicationContext context = new ClassPathXmlApplicationContext("cn\\rocker\\spring\\test\\spring-config.xml");
6 //2.从容器获取对象
7 //Object user = context.getBean("user", User.class);
8 //3.打印对象
9 //System.out.println(user);
10 }
11 }
2.给bean元素设置lazy-init="true"属性--调用getBean()方法时,bean被实例化,即对容器管理的bean进行请求时,才会实例化
lazy-init="true">
1 public class Demo {
2 @Test
3 public void run(){
4 //1.创建容器对象
5 ApplicationContext context = new ClassPathXmlApplicationContext("cn\\rocker\\spring\\test\\spring-config.xml");
6 //2.从容器获取对象
7 Object user = context.getBean("user", User.class);
8 //3.打印对象
9 //System.out.println(user);
10 }
11 }
3.给bean元素设置scope="singleton"属性(默认)--容器创建,容器管理的bean即被实例化,以后每次请求获得的都是相同对象
scope="singleton">
1 @Test
2 public void run4(){
3 //1.创建容器对象
4 ApplicationContext context = new ClassPathXmlApplicationContext("cn\\rocker\\spring\\test\\spring-config.xml");
5 //2.从容器获取对象
6 Object user1 = context.getBean("user", User.class);
7 Object user2 = context.getBean("user", User.class);
8 Object user3 = context.getBean("user", User.class);
9 //3.打印对象
10 //System.out.println(user1);
11 System.out.println(user2 == user3);
12 }
4.给bean元素设置scope="prototype"属性--调用getBean()方法时,bean被实例化,即对容器管理的bean进行请求时,才会实例化,而且每次请求都会获得新的对象
scope="prototype">
1 @Test
2 public void run5(){
3 //1.创建容器对象
4 ApplicationContext context = new ClassPathXmlApplicationContext("cn\\rocker\\spring\\test\\spring-config.xml");
5 //2.从容器获取对象
6 Object user4 = context.getBean("user", User.class);
7 Object user5 = context.getBean("user", User.class);
8 Object user6 = context.getBean("user", User.class);
9 //3.打印对象
10 //System.out.println(user1);
11 System.out.println(user5 == user6);
12 }
总结:1.默认情况下,容器创建,bean即被实例化
2.当scope为singleton(默认)时,设置lazy-init="true",则会在请求对象时,对对象进行实例化
3.当scope为prototype时,则会在请求对象时,对对象进行实例化,且每次请求都会创建新的实例