小弟初学spring,可是在销毁bean的时候,代码如下:
applicationContext.xml
<beans <br=""> xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="user" class="com.xznu.springdemo.UserBean" <br=""> abstract="false" lazy-init="default" autowire="default"
dependency-check="default" >
</bean></beans>
UserBean.java
package com.xznu.springdemo;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
public class UserBean implements InitializingBean,DisposableBean{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void afterPropertiesSet() throws Exception {
// 继承初始化接口
name = "wwx";
age = 23;
}
public void destroy() throws Exception {
// 继承销毁接口
name = null;
age = 0;
System.out.println("以销毁!"+this.name);
}
}
MainDemo.java
package com.xznu.springdemo;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class MainDemo {
public static void main(String args[]){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserBean userBean = (UserBean)context.getBean("user");
System.out.println("name:"+userBean.getName());
System.out.println("age:"+userBean.getAge());
}
}
只能初始化,却能销毁Bean,,不知道怎么回事?十分郁闷。。望高手给解决一下!谢谢!
spring新手--一个简单的问题(sprinf bean的销毁)
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- lggegegmail 2008-09-19 15:05关注
你的问题应该是: 只能初始化,却不能销毁Bean 吧.
之所以没有依据你的预期调用DisposableBean.destroy()方法,是由于,整段代码结束了. 哈哈.
将代码改成下面这样:
[code="java"] public static void main(String args[]) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("user.xml");
context.registerShutdownHook();UserBean userBean = (UserBean) context.getBean("user"); System.out.println("name:" + userBean.getName()); System.out.println("age:" + userBean.getAge()); }[/code]
注意这一句: context.registerShutdownHook();
其实, 它内部就是给 Runtime.getRuntime().addShutdownHook(this.shutdownHook);
也就是在jvm停掉之前执行 this.shutdownHook 里面定义的事情.
只有使用context.registerShutdownHook(); 注册了shutdownHook, 才可以触发剩下的事情, 比如说 DisposableBean.destroy()方法.本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥50 C# 使用DEVMOD设置打印机首选项
- ¥15 麒麟V10 arm安装gdal
- ¥15 想用@vueuse 把项目动态改成深色主题,localStorge里面的vueuse-color-scheme一开始就给我改成了dark,不知道什么原因(相关搜索:背景颜色)
- ¥20 OPENVPN连接问题
- ¥15 flask实现搜索框访问数据库
- ¥15 mrk3399刷完安卓11后投屏调试只能显示一个设备
- ¥100 如何用js写一个游戏云存档
- ¥15 ansys fluent计算闪退
- ¥15 有关wireshark抓包的问题
- ¥15 需要写计算过程,不要写代码,求解答,数据都在图上