Spring-Bean的销毁使用destroy-method()方法无效解决方案(容器!附源码)

简介:

Bean

package com.gc.action;

import java.util.Date;

public class HelloWorld {

	private String msg=null;//该变量用来存储字符串
	private Date date=null;//该变量用来存储日期
//	public HelloWorld(String msg)
//	{
//		    this.msg=msg;	
//	}
//	
//	public HelloWorld()//这个必须写,否则不能转到上面的那个
//	{
//	    this.msg=msg;	
//	}
	//初始化
	public void init(){
		this.msg="HelloWorld";
		this.date=new Date();
	}
	
	//销毁
	public void cleanup(){
		this.msg="";
		this.date=null;
		System.out.println("您销毁了msg"+this.msg+"和date"+this.date);
	}
	
	//设定变量msg的set方法
	public void setMsg(String msg) {
		this.msg=msg;
	}
	
	//获取变量msg的get方法
	public String getMsg() {
		return this.msg;
	}

	public Date getDate() {
		return this.date;
	}

	public void setDate(Date date) {
		this.date = date;
	}

	
	
	
	
}

配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    <!--定义一个Bean-->
    <bean id="HelloWorld" class="com.gc.action.HelloWorld" init-method="init" destroy-method="cleanup">
    <!--将其变量msg通过依赖注入-->
 

    
    </bean>
    

</beans>


经过修改,原来是容器的问题!容器需要关闭是前提条件,SPRING BEAN的生命周期,SPRING的单例模式,动态代理,反射机制,一定要懂得。写中间件的经历就会特别有助于理解这些框架性的东西:


修改后的项目地址如下:http://download.csdn.net/detail/opzoonzhuzhengke/4156763

http://download.csdn.net/detail/opzoonzhuzhengke/4156763



修改后的代码:

BEAN:

package com.gc.action;

import java.util.Date;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.DisposableBean;

public class HelloWorld 
//implements InitializingBean,DisposableBean
{

	private String msg=null;//该变量用来存储字符串
	private Date date=null;//该变量用来存储日期
	


	
	public void afterPropertiesSet() {
		// TODO Auto-generated method stub
		this.msg="HelloWorld";
		this.date=new Date();
		System.out.println("2000");
	}
	
	
	public void cleanup() {
		// TODO Auto-generated method stub
		this.msg="";
		this.date=null;
	    System.out.println("您销毁了msg"+this.msg+"和date"+this.date);  
	}
	
	public HelloWorld(String msg)
	{
		    this.msg=msg;	
	}
	
	public HelloWorld()//这个必须写,否则不能转到上面的那个
	{
	    this.msg=msg;	
	}
	
	//设定变量msg的set方法
	public void setMsg(String msg) {
		this.msg=msg;
	}
	
	//获取变量msg的get方法
	public String getMsg() {
		return this.msg;
	}

	public Date getDate() {
		return this.date;
	}

	public void setDate(Date date) {
		this.date = date;
	}


	
}


config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    <!--定义一个Bean-->
    <bean id="HelloWorld" class="com.gc.action.HelloWorld" init-method="afterPropertiesSet" destroy-method="cleanup">
    <!--将其变量msg通过依赖注入-->
 

    
    </bean>
    

</beans>


测试程序:

package com.gc.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

import com.gc.action.HelloWorld;


public class TestHelloWorld {
    public static void main(String[] args)
    {
    	//通过ApplicationContext来获取Spring文件的配置
    	AbstractApplicationContext actx=new ClassPathXmlApplicationContext("config.xml");
    
    	
        //通过Bean的id来获取Bean
    	HelloWorld helloworld=(HelloWorld)actx.getBean("HelloWorld");
    	
    	//打印输出
    	System.out.println(helloworld.getMsg()+" "+helloworld.getDate());
    	
    	actx.close();
    	
    }
}


最重要的输出部分:

2000
HelloWorld Tue Mar 20 15:36:46 CST 2012
您销毁了msg和datenull






目录
相关文章
|
6月前
|
设计模式 Java 开发者
如何快速上手【Spring AOP】?从动态代理到源码剖析(下篇)
Spring AOP的实现本质上依赖于代理模式这一经典设计模式。代理模式通过引入代理对象作为目标对象的中间层,实现了对目标对象访问的控制与增强,其核心价值在于解耦核心业务逻辑与横切关注点。在框架设计中,这种模式广泛用于实现功能扩展(如远程调用、延迟加载)、行为拦截(如权限校验、异常处理)等场景,为系统提供了更高的灵活性和可维护性。
|
10月前
|
前端开发 Java 物联网
智慧班牌源码,采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署
智慧班牌系统是一款基于信息化与物联网技术的校园管理工具,集成电子屏显示、人脸识别及数据交互功能,实现班级信息展示、智能考勤与家校互通。系统采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署与私有化定制。核心功能涵盖信息发布、考勤管理、教务处理及数据分析,助力校园文化建设与教学优化。其综合性和可扩展性有效打破数据孤岛,提升交互体验并降低管理成本,适用于日常教学、考试管理和应急场景,为智慧校园建设提供全面解决方案。
585 70
|
9月前
|
druid Java 关系型数据库
Spring Boot与Druid升级解决方案
好的,我需要帮助用户解决他们遇到的数据库连接问题,并升级项目的依赖。首先,用户提供的错误信息是关于Spring Boot应用在初始化数据源时抛出的异常,具体是Druid连接池验证连接失败。同时,用户希望升级项目的依赖版本。
838 10
|
10月前
|
监控 Java 关系型数据库
Spring Boot整合MySQL主从集群同步延迟解决方案
本文针对电商系统在Spring Boot+MyBatis架构下的典型问题(如大促时订单状态延迟、库存超卖误判及用户信息更新延迟)提出解决方案。核心内容包括动态数据源路由(强制读主库)、大事务拆分优化以及延迟感知补偿机制,配合MySQL参数调优和监控集成,有效将主从延迟控制在1秒内。实际测试表明,在10万QPS场景下,订单查询延迟显著降低,超卖误判率下降98%。
437 5
|
10月前
|
缓存 安全 Java
深入解析HTTP请求方法:Spring Boot实战与最佳实践
这篇博客结合了HTTP规范、Spring Boot实现和实际工程经验,通过代码示例、对比表格和架构图等方式,系统性地讲解了不同HTTP方法的应用场景和最佳实践。
935 5
|
10月前
|
SQL 前端开发 Java
深入分析 Spring Boot 项目开发中的常见问题与解决方案
本文深入分析了Spring Boot项目开发中的常见问题与解决方案,涵盖视图路径冲突(Circular View Path)、ECharts图表数据异常及SQL唯一约束冲突等典型场景。通过实际案例剖析问题成因,并提供具体解决方法,如优化视图解析器配置、改进数据查询逻辑以及合理使用外键约束。同时复习了Spring MVC视图解析原理与数据库完整性知识,强调细节处理和数据验证的重要性,为开发者提供实用参考。
416 0
|
10月前
|
安全 前端开发 Java
Spring Boot 项目中触发 Circular View Path 错误的原理与解决方案
在Spring Boot开发中,**Circular View Path**错误常因视图解析与Controller路径重名引发。当视图名称(如`login`)与请求路径相同,Spring MVC无法区分,导致无限循环调用。解决方法包括:1) 明确指定视图路径,避免重名;2) 将视图文件移至子目录;3) 确保Spring Security配置与Controller路径一致。通过合理设定视图和路径,可有效避免该问题,确保系统稳定运行。
652 0
|
XML Java 数据格式
Spring IoC容器初始化过程(xml形式)
Spring IoC容器初始化过程(xml形式)
253 0
|
XML Java 数据格式
Spring5源码(15)-IoC容器启动过程简析及XmlBeanFactory初始化
Spring5源码(15)-IoC容器启动过程简析及XmlBeanFactory初始化
171 1