spring容器加载完成执行某个方法

今天遇到一个问题,需要在项目中加入一个定时器,需要在项目启动后就执行,所以就在网上找spring容器初始化之后就执行的方法有什么:

查了很多资料,总共找到了两个符合条件的方法,都是用了一下之后,结合网上的信息说说我个人的理解:

1.写一个类,实现BeanPostProcessor,这个接口有两个方法:

(1)postProcessBeforeInitialization方法,在spring中定义的bean初始化前调用这个方法;

(2)postProcessAfterInitialization方法,在spring中定义的bean初始化后调用这个方法;

首先,开始我试过这个方法,才发现,这个接口是在spring容器启动时,每初始化一个bean,便会调用一次,也就是说,你初始化多少个bean,变回调用多少次,当然也就不符合我之前的需求;

2.之后,我找到了另外一个方法,写一个类,实现InitializingBean接口:

(1)实现这个接口,只要实现afterPropertiesSet()这个方法,将你要预处理的代码写在里面,spring容器启动后,就会执行这个里面的方法。

很明显,最后一个符合我的需求,我将计时器代码写在实现InitializingBean接口的类中afterPropertiesSet()方法里面。

public class DayTradeTimer implements InitializingBean{

	/**
	 *
	 */
	private static final long serialVersionUID = -5173826987102711830L;

	@SuppressWarnings("deprecation")
	public void afterPropertiesSet() throws Exception {
		// TODO Auto-generated method stub
		Date date = new Date();
		//每天凌晨两点执行
		if((date.getHours()==2 && date.getMinutes()>0) || (date.getHours()>2)){
			date.setDate(date.getDate()+1);
		}
		date.setHours(2);
		date.setMinutes(0);
		date.setSeconds(0);

		Timer timer = new Timer();
		timer.scheduleAtFixedRate(new TimerTask() {
			@Override
			public void run() {
				// TODO Auto-generated method stub
				System.out.println("***********计时器*****************");
			}
		}, date, 1000*60*60*24);
	}

}

最后,再贴一个servlet在web容器启动时执行的方法

<servlet>
    <servlet-name>myServlet</servlet-name>
    <servlet-class>com.servlet.MyServlet</servlet-class>
    <load-on-startup>1</load-on-startup><!--加这个标签,tomcat启动时会自动加载指定的servlet,值是servlet的加载顺序, 数字越小代表加载的优先级越高-->
</servlet> 
时间: 2024-07-31 14:28:48

spring容器加载完成执行某个方法的相关文章

当spring 容器初始化完成后执行某个方法

在做web项目开发中,尤其是企业级应用开发的时候,往往会在工程启动的时候做许多的前置检查. 比如检查是否使用了我们组禁止使用的Mysql的group_concat函数,如果使用了项目就不能启动,并指出哪个文件的xml文件使用了这个函数. 而在Spring的web项目中,我们可以介入Spring的启动过程.我们希望在Spring容器将所有的Bean都初始化完成之后,做一些操作,这个时候我们就可以实现一个接口: package com.yk.test.executor.processor publi

spring 容器加载完成后执行某个方法

理论 刚好再开发过程中遇到了要在项目启动后自动开启某个服务,由于使用了spring,我在使用了spring的listener,它有onApplicationEvent()方法,在Spring容器将所有的Bean都初始化完成之后,就会执行该方法. 应用场景:很多时候我们想要在某个类加载完毕时干某件事情,但是使用了spring管理对象,我们这个类引用了其他类(可能是更复杂的关联),所以当我们去使用这个类做事情时发现包空指针错误,这是因为我们这个类有可能已经初始化完成,但是引用的其他类不一定初始化完成

spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件)

原文地址:http://zhaoshijie.iteye.com/blog/1974682 应用场景:很多时候我们想要在某个类加载完毕时干某件事情,但是使用了spring管理对象,我们这个类引用了其他类(可能是更复杂的关联),所以当我们去使用这个类做事情时发现包空指针错误,这是因为我们这个类有可能已经初始化完成,但是引用的其他类不一定初始化完成,所以发生了空指针错误,解决方案如下: 1.写一个类继承spring的ApplicationListener监听,并监控ContextRefreshedE

Spring之IOC容器加载初始化的方式

引言 我们知道IOC容器时Spring的核心,可是如果我们要依赖IOC容器对我们的Bean进行管理,那么我们就需要告诉IOC容易他需要管理哪些Bean而且这些Bean有什么要求,这些工作就是通过通过配置文件告诉Spring 的IOC容器.在我们的完成这些配置文件以后,如果IOC容易要实现对这些Bean的管理,除了资源的定位还有一个很重要的一步就是完成IOC加载初始化,也就是配置文件的载入过程.完成IOC容器加载初始化的方式只要有三种,第一种就是通过File文件加载,第二种是通过Classpath

Spring task配置,及解决加载两次的方法

? 关于 启动Task任务同时加载两次的解决方法:? 将spring MVC部分的定义另外建立一个文件,同时把Task配置放在此处,然后在web.xml文件中的处加载 <servlet> <servlet-name>SpringMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-pa

使用getScript()方法异步加载并执行js文件

使用getScript()方法异步加载并执行js文件 使用getScript()方法异步请求并执行服务器中的JavaScript格式的文件,它的调用格式如下所示: jQuery.getScript(url,[callback])或$.getScript(url,[callback]) 参数url为服务器请求地址,可选项callback参数为请求成功后执行的回调函数. 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//E

Spring如何加载XSD文件(org.xml.sax.SAXParseException: Failed to read schema document错误的解决方法)

本文原文连接: http://blog.csdn.net/bluishglc/article/details/7596118 ,转载请注明出处! 有时候你会发现过去一直启动正常的系统,某天启动时会报出形如下面的错误: [plain] view plaincopy org.xml.sax.SAXParseException: schema_reference.4: Failed to read schema document 'http://www.springframework.org/sche

25.使用getScript()方法异步加载并执行js文件

使用getScript()方法异步请求并执行服务器中的JavaScript格式的文件,它的调用格式如下所示: jQuery.getScript(url,[callback])或$.getScript(url,[callback]) 参数url为服务器请求地址,可选项callback参数为请求成功后执行的回调函数. 例如,点击“加载”按钮,调用getScript()加载并执行服务器中指定名称的JavaScript格式的文件,并在页面中显示加载后的数据内容,如下图所示: 在浏览器中显示的效果: 从图

当springMVC 容器初始化完成后执行某个方法

分类: spring java2013-06-19 16:40 8289人阅读 评论(4) 收藏 举报 在某些应用中,我们希望,当spring 容器将所有的bean都初始化完成后,做一个操作(例如:将数据库中的字典,加载到内存中),这时我们可以实现一个接口,如下: [java] view plaincopyprint? package com.yk.test.executor.processor public class InstantiationTracingBeanPostProcessor