Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 358|回复: 0

Spring bean 实现生命周期的三种解决方案

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-7-10 14:54:00 | 显示全部楼层 |阅读模式

    解决方案一:通过XML配置文件实现:(标签bean的属性init-method和destroy-method)

    beans.xml:

     

    <beans>
    	<bean id="bean" class="org.spring.tutorial.SimpleBean" init-method="init" destroy-method="destroy" />
    </beans>

    SimpleBean.java:

     

     

    package org.spring.tutorial;
    
    public class SimpleBean {
    
    	public SimpleBean() {
    		System.out.println("SimpleBean called");
    	}
    	
    	public void init() {
    		System.out.println("init called");
    	}
    	
    	public void destroy() {
    		System.out.println("destroy called");
    	}
    	
    }
    


     

    MainApp.java:

     

    package org.spring.tutorial;
    
    import org.springframework.context.support.AbstractApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class MainApp {
    
    	public static void main(String[] args) {
    		AbstractApplicationContext context 
    		= new ClassPathXmlApplicationContext("beans.xml"); // 加载指定XML文件的定义
    		context.registerShutdownHook();	// 注册关闭钩子
    	}
    }


    运行之:

     

     

    SimpleBean called
    init called
    五月 19, 2013 5:59:18 下午 org.springframework.context.support.AbstractApplicationContext doClose
    INFO: Closing org.springframework.context.support.ClassPathXmlApplicationContext@1286c71: startup date [Sun May 19 17:59:18 CST 2013]; root of context hierarchy
    destroy called


    解决方案二:实现Spring的InitializingBean和DisposableBean。

     

    SimpleBean.java:

     

    package org.spring.tutorial;
    
    
    import org.springframework.beans.factory.DisposableBean;
    import org.springframework.beans.factory.InitializingBean;
    
    
    public class SimpleBean implements InitializingBean,DisposableBean {
    
    
    	public SimpleBean() {
    		System.out.println("SimpleBean called");
    	}
    
    
    	@Override
    	public void destroy() throws Exception {
    		System.out.println("destroy called");
    	}
    
    
    	@Override
    	public void afterPropertiesSet() throws Exception {
    		System.out.println("afterPropertiesSet called");
    	}
    	
    
    
    	
    }


    beans.xml:

     

     

    <beans>
    
    	<bean id="bean" class="org.spring.tutorial.SimpleBean" />
    	
    </beans>


    运行结果:

     

     

    SimpleBean called
    afterPropertiesSet called
    五月 19, 2013 6:03:44 下午 org.springframework.context.support.AbstractApplicationContext doClose
    INFO: Closing org.springframework.context.support.ClassPathXmlApplicationContext@e77ca4: startup date [Sun May 19 18:03:44 CST 2013]; root of context hierarchy
    destroy called


    解决方案三:利用javax.annotation包的注解PostConstruct和PreDestroy。

     

    SimpleBean.java:

     

    package org.spring.tutorial;
    
    import javax.annotation.PostConstruct;
    import javax.annotation.PreDestroy;
    
    public class SimpleBean {
    
    	public SimpleBean() {
    		System.out.println("SimpleBean called");
    	}
    
    	@PreDestroy
    	public void destroy() throws Exception {
    		System.out.println("destroy called");
    	}
    
    	@PostConstruct
    	public void afterPropertiesSet() throws Exception {
    		System.out.println("afterPropertiesSet called");
    	}
    	
    
    	
    }
    


    beans.xml:

     

     

    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    
        <context:annotation-config />
    	<bean id="bean" class="org.spring.tutorial.SimpleBean" />
    	
    </beans>


    运行结果:

     

     

    SimpleBean called
    五月 19, 2013 6:06:39 下午 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
    INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@431425: defining beans [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,bean,org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor]; root of factory hierarchy
    afterPropertiesSet called
    destroy called


    总结:可以利用接口(InitializingBean,DisposableBean),注解(@PreDestroy,@PostConstruct)和XML配置文件(bean的属性init-method,destroy-method)来实现bean的生命周期。可以根据个人的喜好选择不同的方案。

     




     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-1 06:04 , Processed in 0.061965 second(s), 27 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表