wuleixushi 2008-09-19 11:46
浏览 387
已采纳

spring新手--一个简单的问题(sprinf bean的销毁)

小弟初学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,,不知道怎么回事?十分郁闷。。望高手给解决一下!谢谢!

  • 写回答

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()方法.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥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 需要写计算过程,不要写代码,求解答,数据都在图上