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

http://www.mincoder.com/article/1812.shtml


今天遇到一个问题,需要在项目中加入一个定时器,需要在项目启动后就执行,所以就在网上找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>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot的执行原理包括以下几个关键步骤: 1. 启动过程:Spring Boot的启动入口是`SpringApplication`类的`run()`方法。在启动过程中,它会创建一个`ApplicationContext`(应用上下文)对象,加载所有的配置信息,并进行必要的初始化工作。 2. 自动配置:Spring Boot通过自动配置机制来简化开发者的工作。它会根据classpath中的依赖和配置文件,自动配置各种功能模块,如数据源、Web容器、日志、安全等。自动配置是通过条件注解和条件属性来实现的,只有满足特定条件的配置才会生效。 3. 命令行参数解析:Spring Boot支持从命令行参数中获取配置信息。它会解析命令行参数,并将其转化为Spring Boot应用的配置属性。 4. 启动器:Spring Boot提供了一系列的启动器(starters),可以简化依赖管理。启动器是一组预定义的依赖关系,可以一次性引入一组相关的依赖。例如,通过引入`spring-boot-starter-web`启动器,可以自动引入与Web开发相关的依赖。 5. 条件化加载Spring Boot可以根据条件来选择性地加载某些组件。它使用条件注解和条件属性,根据特定的条件判断是否加载某个组件。这样可以根据不同的环境和配置,动态地决定加载哪些组件。 6. 外部化配置:Spring Boot支持将配置信息外部化,可以通过配置文件、环境变量、命令行参数等方式来动态配置应用。它提供了一个统一的配置模型,并支持多种配置格式,如properties、YAML等。 7. 自定义启动过程:Spring Boot提供了一些扩展点和回调接口,可以让开发者在应用启动过程中插入自定义的逻辑。例如,可以通过实现`ApplicationRunner`和`CommandLineRunner`接口,在应用启动后执行一些初始化操作。 总体来说,Spring Boot的执行原理是通过自动配置、外部化配置和条件化加载等机制,简化了开发者的工作,使得应用可以快速启动,并按需加载所需的组件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值