码迷,mamicode.com
首页 > 编程语言 > 详细

Spring中Bean的生命周期讨论

时间:2018-03-27 12:33:42      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:oca   out   object   tor   str   java   配置文件   work   r.java   

1、代码和配置文件准备

1.1、测试类(user.java)

 1 public class User {
 2     private int id;
 3     private String name;
 4     private int age;
 5     
 6     public int getId() {
 7         return id;
 8     }
 9     public void setId(int id) {
10         this.id = id;
11     }
12     public String getName() {
13         return name;
14     }
15     public void setName(String name) {
16         this.name = name;
17     }
18     public int getAge() {
19         return age;
20     }
21     public void setAge(int age) {
22         this.age = age;
23     }
24     
25     public void say() {
26         System.out.println("hello man ");
27     }
28     
29     public User() {
30         super();
31         // TODO Auto-generated constructor stub
32     }
33     
34     //初始化方法定义
35     public void init() {
36         System.out.println("user init...");
37     }
38     
39     //销毁方法定义
40     public void destory() {
41         System.out.println("user destory...");
42     }
43     
44     
45 }

1.2、配置文件(applicationcontext.xml)

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xmlns:aop="http://www.springframework.org/schema/aop"
 5     xmlns:context="http://www.springframework.org/schema/context"
 6     xmlns:tx="http://www.springframework.org/schema/tx"
 7     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 8         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
 9         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
10         http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">
11 
12 <!-- 配置:单例、初始化方法、销毁方法 与user.java对应 -->
13 <bean id="user" class="com.spring.mybean.User" init-method="init" destroy-method="destory" scope="singleton"></bean>
14 </beans>

1.3、测试方法

1 @Test
2     public void testLoad() {
3         ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationcontext.xml");
4         Object bean = context.getBean("user");
5         ClassPathXmlApplicationContext cxf = (ClassPathXmlApplicationContext)context;
6         cxf.close();
7     }

2、输出定位

2.1、测试条件(单例)

在测试方法的第3行打断点,当走完第3行,到达第4行,控制台输出user init ...,说明user bean在容器初始化即applicationcontext.xml加载的时候就初始化成功了。

断点继续往下,当走完第6行,控制台输出 user destory ...,说明user bean已经被销毁了。

2.2、测试条件(单例,lay-init="true")

修改配置文件,测试类代码同上

1 <bean id="user" class="com.spring.mybean.User"  init-method="init" destroy-method="destory" scope="singleton" lazy-init="true"></bean>

在测试方法的第3行打断点,当走完第3行,到达第4行,控制台没有输出user init ...,说明user bean在容器初始化即applicationcontext.xml加载的时候并没有初始化,当走完第4行,到达底5行,控制台输出user init ...,说明user bean 在从容器获取user bean 的时候进行的初始化。销毁也是在走完第6行的时候进行的user bean销毁操作.

2.3、测试条件(多例,lay-init="true")

修改配置文件

1 <bean id="user" class="com.spring.mybean.User"  init-method="init" destroy-method="destory" scope="prototype" lazy-init="true"></bean>

在测试方法的第3行打断点,当走完第3行,到达第4行,控制台没有输出user init ...,说明user bean在容器初始化即applicationcontext.xml加载的时候并没有初始化,当走完第4行,到达底5行,控制台输出user init ...,说明user bean 在从容器获取user bean 的时候进行的初始化。走完第6行,控制台也没有输出user destory ...,说明当bean设置为多例的时候,容器销毁的时候bean并没有调用destory方法

3、总结

3.1、单例,没有设置lay-init="true"时,bean在容器加载的时候进行的初始化,在容器关闭的时候进行销毁
3.2、单例,设置lay-init="true"时,bean在从容器中获取相关bean时,或者说调用实例对象的时候进行的初始化,在容器关闭的时候进行销毁
3.3、当scope不是单例即singleton时,初始化周期同上,但销毁方法不会触发

 

Spring中Bean的生命周期讨论

标签:oca   out   object   tor   str   java   配置文件   work   r.java   

原文地址:https://www.cnblogs.com/bpdmutou/p/8656470.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!