`

Spring容器加载完之后执行特定任务

 
阅读更多
http://my.oschina.net/simpleton/blog/692799
有两个服务器类,需要SpringContext在InitAfterSpringContextService之前初始化:

1、SpringContext

spring容器的上线文环境

package com.cdelabcare.pubservice;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Service;

/**
 * Spring上下文环境
 */
@Service
public class SpringContext implements ApplicationContextAware {

    /** Spring应用上下文环境 */
    private static ApplicationContext applicationContext;

    /**
     * 实现ApplicationContextAware接口的回调方法,设置上下文环境
     * <pre>
     * 当spring容器加载完后会触发该方法
     * </pre>
     * @param applicationContext {@link ApplicationContext}
     * @throws BeansException
     */
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        SpringContext.applicationContext = applicationContext;

    }

    /**
     * @return ApplicationContext
     */
    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    /**
     * 获取对象
     * 
     * @param name
     * @return Object 一个以所给名字注册的bean的实例
     * @throws BeansException
     */
    public static Object getBean(String name) throws BeansException {
        return applicationContext.getBean(name);
    }

    /**
     * 获取类型为requiredType的对象
     * 如果bean不能被类型转换,相应的异常将会被抛出(BeanNotOfRequiredTypeException)
     * 
     * @param name
     *            bean注册名
     * @param requiredType
     *            返回对象类型
     * @return Object 返回requiredType类型对象
     * @throws BeansException
     */
    public static <T> T getBean(String name, Class<T> requiredType) throws BeansException {
        return applicationContext.getBean(name, requiredType);
    }
}





2、InitAfterSpringContextService

在Spring初始化完成之后执行一些初始化任务(需要在SpringContext执行完成之后执行)

package com.cdelabcare.service.serviceutil;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Service;

import com.cdelabcare.pubservice.SpringContext;

/**
 * 初始化Spring完成之后的操作
 * @create pengjunhao
 * @createDate 2016年6月16日 上午10:06:11
 * @update 
 * @updateDate 
 */
@Service
public class InitAfterSpringContextService implements ApplicationListener<ContextRefreshedEvent> {

    /** 日志 */
    private static final Logger LOGGER = LoggerFactory
        .getLogger(InitAfterSpringContextService.class);

    /** 引入SpringContext的依赖,主要为了让SpringContext优先加载 */
    @Autowired
    private SpringContext springContext;

    /*
     * 监听事件
     * @see org.springframework.context.ApplicationListener#onApplicationEvent(org.springframework.context.ApplicationEvent)
     */
    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        //root application context 没有parent
        if (event.getApplicationContext().getParent() == null) {
            LOGGER.info("【初始化事务....】");
            // TODO something
        }
    }

}

通过使用implements ApplicationListener<ContextRefreshedEvent>可以监听spring容器是否初始化完成。
分享到:
评论

相关推荐

    详解spring boot容器加载完后执行特定操作

    "Spring Boot 容器加载完成后执行特定操作" Spring Boot 框架提供了多种方式来执行容器加载完成后的特定操作,例如使用 ApplicationListener 接口或使用 @PostConstruct 注解。在本文中,我们将介绍使用 ...

    Spring Boot容器加载时执行特定操作(推荐)

    Spring Boot 容器加载时执行特定操作 Spring Boot 框架提供了多种方式来执行容器加载时的特定操作。其中一种方式是通过实现 ApplicationListener 接口,并指定相应的事件来执行操作。 ApplicationListener 接口是 ...

    Spring 容器后处理器

    该接口只有一个方法`postProcessBeanFactory`,该方法在容器加载完成之后被调用,可以用来改变容器中的配置或做一些初始化工作。 ```java public interface BeanFactoryPostProcessor { void ...

    Spring容器 .ppt

    Spring容器是Spring框架的核心组成部分,它负责管理对象的生命周期和对象之间的依赖关系。Spring容器的主要职责是读取配置元数据,创建和组装Bean,并提供Bean的完整生命周期管理。本篇内容将深入探讨Spring容器的...

    spring容器简单实例

    本实例将带你深入理解Spring容器的基本使用,通过实际操作来帮助你快速上手。 1. **Spring容器概述** Spring容器是Spring框架的核心,负责管理对象的生命周期和依赖关系。主要有两种类型的容器:BeanFactory和...

    spring加载

    Spring通过代理模式实现AOP,可以生成JDK动态代理或CGLIB代理,使得切面可以在目标对象的方法调用前后执行特定的逻辑。 五、Spring Boot启动流程 对于使用Spring Boot的应用,其启动流程更简化。Spring Boot通过`...

    Spring动态加载配置文件

    在Spring框架中,动态加载配置文件是一项重要的...总的来说,Spring动态加载配置文件涉及到IoC容器、属性源、配置加载策略和刷新机制等多个方面。理解和掌握这些知识点,可以帮助我们构建更加灵活和适应性强的应用。

    Spring Bean 加载顺序 .

    在Spring框架中,Bean的加载顺序是理解Spring IoC(Inversion of Control,控制反转)容器工作原理的关键部分。这个过程涉及到Bean定义的解析、实例化、初始化等多个步骤。让我们详细探讨Spring Bean加载顺序的各个...

    Spring中定时任务

    - `TaskScheduler`接口:提供了一种声明式的任务调度方式,可以通过实现该接口并配置到Spring容器中来定制调度策略。 - `ThreadPoolTaskScheduler`:Spring提供的一个默认实现,基于线程池的任务调度器,可以控制...

    spring 容器.docx

    Spring容器是Spring框架的核心组成部分,它负责管理和控制应用程序中的对象,这些对象被称为Bean。Spring容器主要有两种接口形式:BeanFactory和ApplicationContext,后者是前者的子接口。这两种接口都是用来表示...

    Spring Bean重复执行两次(实例被构造两次)问题分析

    在Spring容器初始化时,它会根据配置加载Bean的定义,并根据需要创建Bean实例。Bean的生命周期大致分为以下几个阶段:构造、初始化、正常使用、销毁。如果一个Bean被创建了两次,那么可能是在构造或初始化阶段出现了...

    使用spring @Scheduled注解执行定时任务

    - 确保Spring容器已经正确加载了所有的配置信息。 - 在开发过程中,建议使用简单的Cron表达式进行测试,避免复杂的表达式导致调试困难。 - 如果应用程序部署在集群环境中,需要考虑定时任务的并发执行问题。 通过...

    spring加载restful(文档+程序源码).zip

    《Spring加载RESTful服务详解及源码分析》 在当今的Web开发中,RESTful API已经成为构建可扩展、易于维护的系统的重要组成部分。Spring框架,作为Java生态系统中的中流砥柱,提供了强大的支持来实现RESTful服务。本...

    Spring IoC容器实现的结构分析

    通过对IoC(Inversion of Control,控制反转)的实现,Spring容器将对象的创建和组装工作从应用代码中分离出来,使得应用更易于测试和维护。本文将从实现的角度,通过对外部接口、内部实现、组成部分和执行过程四个...

    Spring和SpringMVC父子容器关系

    Spring容器主要分为两种类型:ApplicationContext和BeanFactory。ApplicationContext是Spring中最常用的容器,它提供了更高级的功能,如对国际化、事件传播、资源加载等的支持。BeanFactory是Spring的基本容器,负责...

    spring ioc和aop原理流程图(详细)

    5. **Bean的生命周期**:Spring容器对Bean的生命周期进行管理,包括初始化、正常使用、销毁等阶段,开发者可以自定义生命周期回调方法以进行特定操作。 ### Spring AOP **面向切面编程(AOP)** 是Spring的另一个...

    Spring SpringMVC在启动完成后执行方法源码解析

    System.out.println("spring容器初始化完毕================================================"); } } ``` 在上面的示例代码中,我们使用 @Component 注解将 BeanDefineConfigue 类注册为 Spring 容器中的一个 ...

    Spring启动后获取所有拥有特定注解的Bean实例代码

    首先,通过实现ApplicationListener接口,可以在Spring容器启动后获取所有的Bean中实现了一个特定接口的对象。ApplicationListener是一个事件监听器接口,用于监听Spring容器中的事件。ContextRefreshedEvent是一个...

    spring注解开发--Bean加载控制.zip

    通过以上这些注解,开发者可以更精细地控制Spring容器中bean的创建、初始化、销毁以及依赖关系。理解并熟练运用这些工具,能够提高代码的可维护性和灵活性。在实际项目中,合理利用这些特性,可以有效地减少配置文件...

Global site tag (gtag.js) - Google Analytics