`

spring context初始化时 增加自己的操作

 
阅读更多

方法1

以下方法适用于容器启动时读取一些自己定义的配置文件内容

自己写一个listener(如 TestContextLoaderListener) 继承 ContextLoaderListener

web.xml里的listener配置由

<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

改成

<listener>
  <listener-class>com.zw.TestContextLoaderListener</listener-class>
</listener>

一下是ContextLoaderListener源码

/*
 * Copyright 2002-2009 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.web.context;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

/**
 * Bootstrap listener to start up and shut down Spring's root {@link WebApplicationContext}.
 * Simply delegates to {@link ContextLoader} as well as to {@link ContextCleanupListener}.
 *
 * <p>This listener should be registered after
 * {@link org.springframework.web.util.Log4jConfigListener}
 * in <code>web.xml</code>, if the latter is used.
 *
 * @author Juergen Hoeller
 * @since 17.02.2003
 * @see org.springframework.web.util.Log4jConfigListener
 */
public class ContextLoaderListener extends ContextLoader implements ServletContextListener {

	private ContextLoader contextLoader;


	/**
	 * Initialize the root web application context.
	 */
	public void contextInitialized(ServletContextEvent event) {
		this.contextLoader = createContextLoader();
		if (this.contextLoader == null) {
			this.contextLoader = this;
		}
		this.contextLoader.initWebApplicationContext(event.getServletContext());
	}

	/**
	 * Create the ContextLoader to use. Can be overridden in subclasses.
	 * @return the new ContextLoader
	 * @deprecated in favor of simply subclassing ContextLoaderListener itself
	 * (which extends ContextLoader, as of Spring 3.0)
	 */
	@Deprecated
	protected ContextLoader createContextLoader() {
		return null;
	}

	/**
	 * Return the ContextLoader used by this listener.
	 * @return the current ContextLoader
	 * @deprecated in favor of simply subclassing ContextLoaderListener itself
	 * (which extends ContextLoader, as of Spring 3.0)
	 */
	@Deprecated
	public ContextLoader getContextLoader() {
		return this.contextLoader;
	}


	/**
	 * Close the root web application context.
	 */
	public void contextDestroyed(ServletContextEvent event) {
		if (this.contextLoader != null) {
			this.contextLoader.closeWebApplicationContext(event.getServletContext());
		}
		ContextCleanupListener.cleanupAttributes(event.getServletContext());
	}

}

我们要重写 contextInitialized这个方法

 

public void contextInitialized(ServletContextEvent event) {
		super.contextInitialized(event);
		//加入自己的操作
	}
 

方法2

让你的service实现ApplicationListener接口

在onApplicationEvent(E event)方法中 写你自己的操作

 ContextRefreshedEvent 这个时间是bean初始化后调用的

 

onApplicationEvent(ContextRefreshedEvent  event){

      //加入自己的操作

}

 

也可以这么写

onApplicationEvent(ApplicationEvent event){

       if(event instanceof ContextRefreshedEvent){

             //加入自己的操作   

    }

}

 

 

event事件介绍

ContextStoppedEvent  context停止事件

ContextRefreshedEvent  context bean加载完事件

ContextStartedEvent   context开始事件

ContextClosedEvent   context关闭事件

 

 

 

分享到:
评论

相关推荐

    利用Spring Context上下文创建自定义对象

    在Spring应用中,Context通常通过`ApplicationContext`接口来实例化,如`ClassPathXmlApplicationContext`或`FileSystemXmlApplicationContext`,这些类用于加载XML配置文件并初始化bean。 创建自定义对象的基本...

    spring-context-4.2.xsd.zip

    Spring Context模块是Spring框架的核心部分,它提供了一个统一的接口来管理应用对象,包括bean的创建、初始化、配置和查找。Context模块使得应用程序可以跨越不同层次和组件,实现松耦合和高可测试性。在Spring中,...

    spring-context源码

    在bean初始化时,`BeanFactory`会根据`BeanDefinition`中的依赖关系,自动将其他bean注入到当前bean的属性中。这种过程称为属性设置,可以通过setter方法、构造函数或者字段注入实现。源码中的`...

    Spring的IoC容器初始化源码解析

    ### Spring的IoC容器初始化源码解析 #### 一、Spring框架的核心——IoC容器 Spring框架是一个开源的轻量级Java开发框架,其核心功能是IoC(Inversion of Control,控制反转)容器和AOP(Aspect Oriented ...

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

    在Spring MVC框架中,应用程序启动时会执行一系列初始化操作,这些操作对于理解Spring MVC的工作原理至关重要。本篇文章将深入探讨Spring MVC启动时初始化的几个常用方法,并解释它们在实际开发中的作用。 首先,...

    spring-context-support源码

    例如,通过`@Autowired`注解可以自动装配所需的bean,而`@PostConstruct`和`@PreDestroy`则用于标记初始化和销毁方法。同时,Spring的事件驱动模型(Event-driven Model)也在这里发挥了作用,允许组件之间以非侵入...

    spring-context-3.1.1.RELEASE.zip

    1. **Bean管理**:Spring Context提供了基于XML、注解和Java配置的三种方式来定义和管理Bean,包括Bean的生命周期管理(初始化、销毁方法)、依赖注入(DI)以及AOP(面向切面编程)支持。 2. **事件传播**:Spring...

    Test05_Spring_Context_XML.rar

    在Spring中,Context XML配置文件是初始化和管理应用程序上下文的关键,它定义了bean的创建、依赖关系以及服务的提供方式。本文将深入探讨Spring工程的初始化模块与基础配置,以及如何利用Maven构建这样的工程。 ...

    spring-context-3.0.0.RELEASE.jar.zip

    2. **依赖注入**:根据配置信息,Spring Context自动完成对象的实例化、初始化和装配,以及对象间的依赖关系。 3. **服务定位**:通过Spring Context,可以方便地获取到容器中的任何Bean,实现服务的查找和调用。 4....

    【戏说Spring Boot】Spring Boot初始化器解析

    在Spring Boot应用开发中,初始化器扮演着重要的角色,它们负责在应用程序启动时执行特定的配置或设置。本文将深入探讨Spring Boot初始化器的三种定义方式及其执行过程。 首先,让我们来看第一种定义初始化器的方式...

    spring配置中<context-param> 和<init-param>的 区别

    在Spring框架中,`&lt;context-param&gt;` 和 `&lt;init-param&gt;` 是两种不同的参数配置方式,它们在Web应用的初始化阶段起着关键作用。了解这两者的区别是优化和理解Spring应用程序运行时行为的重要知识点。 首先,`&lt;context...

    Spring配置文件spring-context.zip

    5. `init-method`和`destroy-method`:指定bean初始化和销毁时要调用的方法。 6. `&lt;import&gt;`:引入其他配置文件,方便模块化和复用。 7. `&lt;context:component-scan&gt;`:通过注解扫描特定包下的类,自动发现并注册带...

    org.springframework.context_3.0.5.release.jar.zip

    通过XML配置或注解的方式,开发者可以控制bean的生命周期,例如设置初始化方法、销毁方法,或者声明bean的范围(单例、原型等)。 四、依赖注入 依赖注入是Spring的核心特性,ApplicationContext通过读取配置文件...

    Spring框架初始化解析

    Spring框架初始化解析是指在使用Spring框架时,如何正确地初始化和加载Spring框架的配置和Bean容器。Spring框架的初始化过程是由Spring容器加载和管理的,通过使用不同的加载方式和Bean生命周期回调方法,来实现对...

    Spring中的Context你真的懂了吗

    在初始化和启动阶段,Spring 会完成 Context 的初始化和启动过程。这个过程都是在 refresh 方法中完成的。在 refresh 方法中,Spring 会做一些准备工作,如创建 BeanFactory、注册 BeanFactoryPostProcessor 等,...

    Spring扫描器—spring组件扫描使用详解

    对于需要在bean初始化或销毁时执行特定操作的情况,可以使用`@PostConstruct`和`@PreDestroy`注解,它们分别标识初始化方法和销毁方法。 七、总结 Spring的组件扫描功能极大地提高了Spring应用的灵活性和可维护性...

    spring boot源码-自定义初始化器的三种方式

    在Spring Boot应用中,自定义初始化器是一种扩展和定制应用程序启动过程的方式。下面将详细介绍三种在Spring Boot中创建自定义初始化器的方法。 ### 第一种:通过`spring.factories`文件 1. **创建配置文件**:在`...

    spring的初始文件

    这些文件是搭建SSM(Spring、SpringMVC、MyBatis)项目的基础,通常包括Spring的核心配置、MVC配置以及其他必要的初始化设置。描述中提到的“springmvc执行流程图”则是一个可视化工具,帮助开发者理解SpringMVC框架...

    Spring @compenent注解详解

    除了初始化和销毁方法,Spring还提供了`InitializingBean`和`DisposableBean`接口,实现了这两个接口的类可以自定义初始化和销毁逻辑。 9. **配置类与`@ConfigurationProperties`** 当需要对Bean进行更复杂的配置...

Global site tag (gtag.js) - Google Analytics