`

Spring MVC启动时初始化的几个常用方法

阅读更多

        SpringMVC的应用中,要实现类似的功能,主要是通过实现下面这些接口(任选一,至少一个即可)

一.ApplicationContextAware接口

package org.springframework.context;
 
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.Aware;
import org.springframework.context.ApplicationContext;
 
public interface ApplicationContextAware extends Aware {
    void setApplicationContext(ApplicationContext var1) throws BeansException;
}

 

二.ServletContextAware 接口

package org.springframework.web.context;
 
import javax.servlet.ServletContext;
import org.springframework.beans.factory.Aware;
 
public interface ServletContextAware extends Aware {
    void setServletContext(ServletContext var1);
}

 

三.InitializingBean接口

package org.springframework.beans.factory;
 
public interface InitializingBean {
    void afterPropertiesSet() throws Exception;
}

 

四.ApplicationListener<ApplicationEvent> 接口

package org.springframework.context;
 
import java.util.EventListener;
import org.springframework.context.ApplicationEvent;
 
public interface ApplicationListener<E extends ApplicationEvent> extends EventListener {
    void onApplicationEvent(E var1);
}

示例程序:

package com.bijian.study.controller;

import javax.servlet.ServletContext;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;
import org.springframework.web.context.ServletContextAware;
 
@Component
public class StartupListener implements ApplicationContextAware, ServletContextAware,
        InitializingBean, ApplicationListener<ContextRefreshedEvent> {
 
    private Logger logger = LogManager.getLogger();
    
    @Override
    public void setApplicationContext(ApplicationContext ctx) throws BeansException {
        logger.info("1 => StartupListener.setApplicationContext");
    }
 
    @Override
    public void setServletContext(ServletContext context) {
        logger.info("2 => StartupListener.setServletContext");
    }
 
    @Override
    public void afterPropertiesSet() throws Exception {
        logger.info("3 => StartupListener.afterPropertiesSet");
    }
 
    @Override
    public void onApplicationEvent(ContextRefreshedEvent evt) {
        logger.info("4.1 => MyApplicationListener.onApplicationEvent");
        if (evt.getApplicationContext().getParent() == null) {
            logger.info("4.2 => MyApplicationListener.onApplicationEvent");
        }
    }
}

服务启动时,输出的顺序如下:

22:54:44.433 [localhost-startStop-1] INFO  com.bijian.study.controller.StartupListener - 1 => StartupListener.setApplicationContext
22:54:44.435 [localhost-startStop-1] INFO  com.bijian.study.controller.StartupListener - 2 => StartupListener.setServletContext
22:54:44.435 [localhost-startStop-1] INFO  com.bijian.study.controller.StartupListener - 3 => StartupListener.afterPropertiesSet
22:54:44.931 [localhost-startStop-1] INFO  com.bijian.study.controller.StartupListener - 4.1 => MyApplicationListener.onApplicationEvent
22:54:44.931 [localhost-startStop-1] INFO  com.bijian.study.controller.StartupListener - 4.2 => MyApplicationListener.onApplicationEvent

        注意:onApplicationEvent方法会触发多次,初始化这种事情,越早越好,建议在setApplicationContext方法中处理,完整示例见附件。

        此外还有一种方法:写个BEAN,将要执行的操作写在构造函数里,再将这个类配置到XML里,比如配置到SPRING-MVC.XML里  <bean class="com.test.xx"> 自己的类。不过不推荐使用这种方法。

 

文章来源:http://www.cnblogs.com/xiohao/p/5279581.html

参考文章:http://blog.csdn.net/axwolfer/article/details/40718609

分享到:
评论

相关推荐

    一个海盗湾的爬虫,通过Spring Mvc提供API.zip

    爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP...

    基于SSM的爬虫系统,Spring+Spring MVC+MyBatis+Druid+Redis+MQ.zip

    爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP...

    DWZ+springMVC+security+权限+mybatis+postgresql+demo

    我就花了几天的时间制作和部署了初始化系统,完成了login的登录,同时对用户登录和session过期进行安全验证,同时将原有的mybaits改造成了postgre,另外增加了权限的使用方法,由于原来的DWZ的列表增删改查、分页并...

    adminstore:一个简单的项目初始化模板,集成shiro,spring,hibernate,spring mvc,ehcache,disconver,bootstrap。搭建项目时候不错的一个选择!,后台采用AdminLte

    AdminStore ...SSH (Spring、SpringMVC、Hibernate) 安全权限 Shiro 缓存 Ehcache 视图模板 freemarker 工作流引擎 activiti 定时任务 quartz AdminLTE bootstrap 搭建步骤 创建数据库。如使用MySQL

    Spring in Action(第二版 中文高清版).part2

    2.5.3 初始化和销毁Bean 2.6 小结 第3章 高级Bean装配 3.1 声明父Bean和子Bean 3.1.1 抽象基Bean类型 3.1.2 抽象共同属性 3.2 方法注入 3.2.1 基本的方法替换 3.2.2 获取器注入 3.3 注入非Spring Bean ...

    Spring in Action(第二版 中文高清版).part1

    2.5.3 初始化和销毁Bean 2.6 小结 第3章 高级Bean装配 3.1 声明父Bean和子Bean 3.1.1 抽象基Bean类型 3.1.2 抽象共同属性 3.2 方法注入 3.2.1 基本的方法替换 3.2.2 获取器注入 3.3 注入非Spring Bean ...

    springmybatis

    下面对这几个配置文件解释下: 1.Configuration.xml 是 mybatis 用来建立 sessionFactory 用的,里面主要包含了数据库连接相关东西,还有 java 类所对应的别名,比如 ...

    java面试宝典

    141、使用useBean标志初始化BEAN时如何接受初始化参数 36 142、使用JSP如何获得客户浏览器的信息? 36 143、能象调用子程序一样调用JSP吗? 36 144、当我重编译我的JSP使用的一个类后,为什么JVM继续使用我的老CLASS...

    千方百计笔试题大全

    141、使用useBean标志初始化BEAN时如何接受初始化参数 36 142、使用JSP如何获得客户浏览器的信息? 36 143、能象调用子程序一样调用JSP吗? 36 144、当我重编译我的JSP使用的一个类后,为什么JVM继续使用我的老CLASS...

    SSH的jar包.rar

    一个请求在Struts2框架中的处理大概分为以下几个步骤: 1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求 2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选...

    基于springboot框架的网上商城系统的设计与实现.zip

    该资源包中可能包含以下几个主要部分:项目源码:包括了整个网上商城系统后端的所有Java源代码,这些代码遵循MVC(模型-视图-控制器)设计模式,将业务逻辑、数据模型和用户界面分离,以提高代码的可维护性和扩展性...

    worldpay-test:测试应用

    在启动时,有几个用户具有预先初始化的角色,并且 登陆页面上的登录功能,只在结果页面上打印消息,取决于登录是通过还是失败 没有测试 角色: 主持人:具有“主持人”角色的用户可以编辑数据库中的现有记录。 ...

    涵盖了90%以上的面试题

    new String(“abc”)创建了几个对象 String变量做“+”运算时的编译优化 "=="和equals方法究竟有什么区别 String,StringBuffer,StringBuilder有什么区别 java中的数组是不是对象 数组初始化的方式有哪几种 length...

    react-spring-security-5-workshop:动手实践研讨会,用于分多个步骤保护React Spring Boot 2应用程序

    响应式Spring Security 5研讨会这是一个动手实践研讨会,内容涉及使用Spring ...车间结构研讨会分为以下几个部分: 基本安全OAuth 2.0 / OpenID Connect执照Apache 2.0许可2019-2020年Andreas Falk版权所有(c)

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    创建了几个字符串对象 30 【基础】接口是否可继承(extends)接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concrete class) 30 【基础】一个".java"源文件中是否可以包含多个类(不是内部类...

    weshop-微信小程序应用商城

    3. 执行docs/sql/data.sql文件,初始化数据 4. 修改配置中心(weshop-config-server)的database.properties和common.properties文件,更新MySQL账号和密码,更新RabbitMQ配置,更新zipkinServer配置 5. 运行Maven命令...

    JAVA上百实例源码以及开源项目源代码

    6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...

Global site tag (gtag.js) - Google Analytics