博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring 注入bean时的初始化和销毁操作
阅读量:6416 次
发布时间:2019-06-23

本文共 3515 字,大约阅读时间需要 11 分钟。

hot3.png

实现bean的初始化和销毁操作有三种方法

1、采用@PostConstruct和 @PreDestroy注解实现</a> 2、实现InitializingBean和DisposableBean接口 3、注入bean时设置init-method和destroy-method指定相应方法

1、采用@PostConstruct和 @PreDestroy注解实现

定义实现类

/** *  */package com.zhu.example.PreExcute;import javax.annotation.PostConstruct;  import javax.annotation.PreDestroy;  /** * @author zhukai * */public class BeanOperation {	@PostConstruct    public void  init(){          System.out.println("init  BeanOperation by @PostConstrut");      }      @PreDestroy      public void  destory(){          System.out.println("destory BeanOperation  by  @PreDestroy");      }  }

Spring配置文件

Spring公共配置

2、实现InitializingBean和DisposableBean接口

定义实现类

/** *  */package com.zhu.example.PreExcute;import org.springframework.beans.factory.DisposableBean;import org.springframework.beans.factory.InitializingBean;/** * @author zhukai * */public class BeanItfInit implements InitializingBean,DisposableBean{	/* (non-Javadoc)	 * @see org.springframework.beans.factory.DisposableBean#destroy()	 */	public void destroy() throws Exception {		System.out.println("destory BeanItfInit  by  DisposableBean"); 	}	/* (non-Javadoc)	 * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()	 */	public void afterPropertiesSet() throws Exception {		System.out.println("init  BeanItfInit by InitializingBean");  	}}

Spring配置文件

3、注入bean时设置init-method和destroy-method指定相应方法

定义实现类

/** * Title: BeanXmlinit.java * Description:  * @author zhukai * @date 2016年6月12日 */package com.zhu.example.PreExcute;/** * Title: BeanXmlinit * Description:  * @author zhukai */public class BeanXmlinit {    public void init(){      	 System.out.println("init  BeanXmlinit by xml");      }      //  how  validate the  destory method is  a question      public void  destory(){      	System.out.println("destory BeanXmlinit  by  xml");        }  }

Spring配置文件

初始化效果

六月 12, 2016 4:44:40 下午 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor 
信息: JSR-330 'javax.inject.Inject' annotation found and supported for autowiringinit BeanOperation by @PostConstrutinit BeanItfInit by InitializingBeaninit BeanXmlinit by xml六月 12, 2016 4:44:40 下午 org.springframework.web.servlet.DispatcherServlet initServletBean信息: FrameworkServlet 'springServlet': initialization completed in 339 ms2016-06-12 16:44:40.814:WARN:oejsh.RequestLogHandler:!RequestLog2016-06-12 16:44:40.830:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:8080[INFO] Started Jetty Server

其他问题

在测试过程中还出现过一些问题

@PostConstruct初始化不起作用

这个是Spring配置文件中 default-lazy-init="true"这个属性引起的,这个属性使得bean没有使用时就不会加载,自然就不会进行初始化。解决方法是将该类改为false或者在bean注入时加入属性,lazy-init="false"。

初始化进行两次

这个问题是因为ContextLoaderListener与DispatcherServlet都会对Spring的配置进行解析造成bean重复初始化,可以使用两个配置文件,只在其中一个文件中进行bean的声明 ContextLoaderListener用配置文件

contextConfigLocation
/WEB-INF/spring-mvc.xml

DispatcherServlet用配置文件

springServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath*:/applicationContext.xml
1
springServlet
/
Spring公共配置

转载于:https://my.oschina.net/superise/blog/690031

你可能感兴趣的文章
ajax的使用
查看>>
windows 64位系统下 apache+php+mysql
查看>>
第八课 技术小白如何在45分钟内发行通证(TOKEN)并上线交易
查看>>
[Delphi] 字节序交换函数
查看>>
nvm 安装及使用
查看>>
实现线程池(一)线程池的基本概念
查看>>
网络流之最大流
查看>>
微信授权登录(yii)
查看>>
Jquery Easy UI--datagrid的使用(转)
查看>>
场景编辑器CocosBuilder使用教程
查看>>
告别忙碌
查看>>
Springboot学习01- 配置文件加载优先顺序和本地配置加载
查看>>
网页缓存技术
查看>>
js修改页面动态添加input框显示与按钮可编辑
查看>>
SSH整合报错:找不到元素 'beans' 的声明
查看>>
REST及RESTful的实现
查看>>
正则化
查看>>
P1437 [HNOI2004]敲砖块
查看>>
nginx 配置https
查看>>
libcurl理解和使用
查看>>