Spring 实例化bean的初始化方法和销毁方法 init-method destroy-method
2013-04-22 20:57
786 查看
Spring版本 2.5首先我们应该知道:[b][b]一、[/b]spring Bean的作用域:scope=singleton(默认,单例,生成一个实例)[/b][b]二、spring Bean的作用域:scope=prototype(多线程, 生成多个实例)[/b][b]三、单例模式,默认在程序初始化的时候实例化([b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b]lazy-init="false"[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b])[/b][/b][b]四、[b][b]prototype,getBean的时候才是实例化[/b][/b][/b][b][b][b]五、lazy-init 只对单例模式起作用,对 [b][b][b][b]prototype 不起作用(因为 [b][b][b][b] [b][b][b][b]prototype 默认就不是程序初始化的时候实例化的[/b][/b][/b][/b][/b][/b][/b])[/b][/b][/b][/b][/b][/b][/b][/b][b]1. 情况一:[/b]
我被实例化了
初始化 true
开闭打开的资源说明: 1. 这个bean 是单例的, 2. 这个bean不是懒加载
输出情况:
我被实例化了
初始化
我被实例化了
初始化
false
初始化
<bean id="personService6" class="com.yokoboy.service.impl.PersonServiceBean" init-method="init" destroy-method="destory" />
AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
PersonService singleton1 = (PersonService) ctx.getBean("personService6"); PersonService singleton2 = (PersonService) ctx.getBean("personService6"); System.out.println(singleton1==singleton2);
ctx.registerShutdownHook();
输出情况:
我被实例化了
初始化 true
开闭打开的资源说明: 1. 这个bean 是单例的, 2. 这个bean不是懒加载
[b]2. 情况二[/b]
<bean id="personService6" class="com.yokoboy.service.impl.PersonServiceBean" init-method="init" destroy-method="destory" scope="prototype" />
AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");PersonService singleton1 = (PersonService) ctx.getBean("personService6");
PersonService singleton2 = (PersonService) ctx.getBean("personService6");
System.out.println(singleton1==singleton2);
ctx.registerShutdownHook();
输出情况:
我被实例化了
初始化
我被实例化了
初始化
false
说明:
destroy-method="destory"只有在单例模式下再有作用。
[b]情况三:[/b]
<bean id="personService6" class="com.yokoboy.service.impl.PersonServiceBean" init-method="init" destroy-method="destory" />
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");输出: 我被实例化了
初始化
说明: 程序并不知道什么时候调用 destory 方法。
最重要的是: 在CS应用程序中,destroy-method="destory" 这个配置基本上没有作用,因为 摧毁方法是由容器调用的,在CS应用程序中,只有程序员自己调用。 再有,当scope是prototype的时候,对象的生存周期 Spring就不管了。只有在tomcat或者容器关闭的时候,由tomcat调用。
相关文章推荐
- Spring容器中的Bean几种初始化方法和销毁方法的先后顺序
- 通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作
- 通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作
- 在spring的init-method指定的方法之前做一些事情要用BeanPostProcessor
- Spring容器中的Bean几种初始化方法和销毁方法的先后顺序
- 【Spring】【Bean的scope属性】【Bean的初始化和销毁方法】
- Spring容器中的Bean几种初始化方法和销毁方法的先后顺序
- 通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作
- 通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作
- 通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作
- 通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作
- Spring中bean的初始化和销毁之前的方法XML和注解的两种形式
- Spring容器中的Bean几种初始化方法和销毁方法的先后顺序
- Spring 初始化bean的方式:InitializingBean、init-method
- 通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作
- 通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作
- Spring容器中的Bean几种初始化方法和销毁方法的先后顺序
- Spring-Bean的销毁使用destroy-method()方法无效解决方案(容器!附源码)
- Spring 实现初始化和销毁bean之前进行的操作的方法
- spring bean初始化和销毁方法