在某些情况下,有可能你会有这种需求:在Spring/SpringMVC项目中,当Spring/SpringMVC启动完成后,你需要执行一个方法来完成某些事件(比如创建网站地图,比如从订阅Redis服务器等),这个时候,可以使用Tomcat/Servlet容器提供的事件回调机制来完成,但是这样有个问题是:无法使用Spring提供的Annotation,解决方法是:
- /*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
- */
- package com.storezhang.web;
- import com.storezhang.util.TimeUtils;
- import com.storezhang.video.util.SiteMapUtils;
- import java.util.Timer;
- import java.util.TimerTask;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.context.ApplicationListener;
- import org.springframework.context.event.ContextRefreshedEvent;
- import org.springframework.stereotype.Service;
- /**
- * 启动监听器
- *
- * @author Storezhang
- */
- @Service
- public class StartupListener implements ApplicationListener<ContextRefreshedEvent> {
- @Autowired
- private SiteMapUtils sites;
- @Override
- public void onApplicationEvent(ContextRefreshedEvent evt) {
- if (evt.getApplicationContext().getParent() == null) {
- createSitemap();
- }
- }
- private void createSitemap() {
- Timer timer = new Timer("createSitemap", true);
- timer.schedule(new TimerTask() {
- @Override
- public void run() {
- System.out.println("--->Create sitemap...");
- sites.createSiteMap();
- System.out.println("--->Success create sitemap...");
- }
- }, 1 * TimeUtils.MIN);
- }
- }
后续研究:
applicationontext和使用MVC之后的webApplicationontext会两次调用上面的方法,如何区分这个两种容器呢?
但是这个时候,会存在一个问题,在web 项目中(spring mvc),系统会存在两个容器,一个是root application context ,另一个就是我们自己的 projectName-servlet context(作为root application context的子容器)。
这种情况下,就会造成onApplicationEvent方法被执行两次。为了避免上面提到的问题,我们可以只在root application context初始化完成后调用逻辑代码,其他的容器的初始化完成,则不做任何处理,修改后代码
如下:
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
if(event.getApplicationContext().getParent() == null){//root application context 没有parent,他就是老大.
//需要执行的逻辑代码,当spring容器初始化完成后就会执行该方法。
}
}
相关推荐
SpringMVC启动完成后执行方法源码解析 SpringMVC框架在启动完成后执行方法源码解析是指在应用程序启动完成后,执行特定的方法或操作,以达到某些业务逻辑的实现。这种机制在实际项目开发中非常有用,例如在系统启动...
Spring、SpringMVC和Hibernate是Java开发中三大主流框架,它们各自在应用程序的不同层次上发挥作用,共同构建出高效、模块化的Web应用。本项目结合了这三个框架,利用MySQL作为数据库,Eclipse作为开发IDE,Maven...
完成上述步骤后,可以直接通过Java的`main`方法运行主类启动应用,Spring Boot会自动加载配置并启动内置的Tomcat服务器。也可以将项目打包成可执行的JAR文件,通过命令行使用`java -jar`命令在任何支持Java的环境中...
在这个项目中,Spring负责管理bean的生命周期和依赖关系,SpringMVC处理Web请求并转发给业务逻辑,而Mybatis则作为数据访问层,负责执行数据库操作。通过这三者的集成,开发者可以构建出结构清晰、易于维护的Web应用...
在Java Web开发中,Spring、SpringMVC和Mybatis是三个非常重要的框架,它们的整合可以构建出高效、灵活的企业级应用。这个压缩包“Spring-SpringMVC-Mybatis整合所有jar包”包含了这三个框架整合所需的全部依赖,...
- `<context-param>`和`<listener>`用于初始化Spring的全局上下文,`ContextLoaderListener`监听器会在服务器启动时加载`applicationContext.xml`配置文件,创建ApplicationContext。 4. **SpringMVC配置**...
搭建Spring、SpringMVC和MyBatis这三大框架是Java Web开发中的常见任务,它们各自在应用程序的不同层次上提供服务,构建出一个完整的MVC(Model-View-Controller)架构。下面将详细介绍这三个框架以及如何将它们整合...
这通常在Spring的配置文件中完成,可以使用`@Configuration`和`@EnableMongoRepositories`注解来启动MongoDB的数据访问层。 接着,创建MongoDB的Repository接口,这是Spring Data MongoDB提供的一种编程模型,可以...
完成这些后,项目就可以启动运行,处理来自客户端的请求了。 总的来说,SSM框架组合提供了完整的解决方案,涵盖了从控制层到数据访问层的开发需求,使得开发者可以更专注于业务逻辑,而不是基础设施的搭建。这个自...
本教程将向您展示如何在IntelliJ IDEA(IDEA)中整合Spring、SpringMVC、MyBatis和Maven,构建一个完整的SSM(Spring、SpringMVC、MyBatis)项目。以下是对每个组件及其整合过程的详细说明: 1. **Spring框架**:...
在Java Web开发领域,Spring、SpringMVC和iBatis是三个非常重要的框架,它们的组合被称为SSM(Spring、SpringMVC、MyBatis)。SSM框架的整合使用能够帮助开发者实现高效、灵活和可扩展的Web应用程序。下面将详细讲解...
Spring、SpringMVC和MyBatis是Java开发中非常流行的三大框架,它们分别负责不同的职责:Spring作为基础的依赖注入容器,SpringMVC是用于构建Web应用的模型-视图-控制器(MVC)框架,而MyBatis则是一个优秀的持久层...
你可以通过运行`mvn clean package`命令打包项目,然后在服务器上部署`.war`文件,启动后就可以访问`http://yourserver/yourapp/hello`来查看结果了。这个过程涵盖了Maven项目的基本配置、Spring框架的IoC容器配置...
在IT行业中,构建高效、可扩展的Web应用是至关重要的,而Spring、SpringMVC和Hibernate这三大框架的结合正是实现这一目标的常用方案。本文将深入探讨如何在IntelliJ IDEA(简称IDEA)环境下,利用Maven来构建一个...
3. **配置 ContextLoaderListener**:为了加载 Spring 的应用上下文,需要添加 `ContextLoaderListener`,它会在服务器启动时初始化 Spring 容器。 4. **定义 Controller**:创建处理请求的 Controller 类,通常...
在开发环境中,开发者需要启动这个服务,然后通过HTTP请求触发Spring MVC的控制器方法,从而调用MyBatis的Mapper接口进行数据库查询。 通过这些知识点的整合,我们可以构建出一个完整的Web应用程序,实现从用户界面...
在Spring中,MyBatis可以与Spring无缝集成,通过SqlSessionFactory和SqlSession对象,开发者可以方便地执行增删查改操作,同时,MyBatis的Mapper接口和XML配置文件或者注解方式让SQL与代码分离,提高了代码的可读性...
本文将深入探讨一款使用Spring、SpringMVC框架构建的学生信息管理系统,旨在为读者提供一个全面的理解,以便于在实际开发中借鉴或改进。 首先,我们需要了解SSM框架。SSM是Spring、SpringMVC和MyBatis的缩写,是一...
在IT行业中,构建一个Web应用程序是一项常见的任务,而Spring、SpringMVC和MyBatis是三个非常关键的框架,它们通常被联合使用来构建高效、可维护的企业级应用。本项目是一个结合了这三个技术的典型示例,让我们深入...
Spring将Mapper接口与XML文件关联起来,使得可以在Service层直接调用Mapper接口的方法,执行数据库操作。Service层负责业务逻辑,Controller层接收HTTP请求,调用Service层方法,最后返回视图或JSON数据。 项目运行...