首页 > 其他分享 >Spring容器加载完之后执行特定任务

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

时间:2023-03-20 18:35:14浏览次数:42  
标签:容器 applicationContext Spring BeansException springframework SpringContext import


有两个服务器类,需要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容器是否初始化完成。


标签:容器,applicationContext,Spring,BeansException,springframework,SpringContext,import
From: https://blog.51cto.com/u_3871599/6138470

相关文章

  • Spring MVC防重复提交
    如何在SpringMVC里面解决此问题(其它框架也一样,逻辑一样,思想一样,和具体框架没什么关系)。要解决重复提交,有很多办法,比如说在提交完成后redirect一下,也可以用本文提到的使用to......
  • Springboot项目密码加密器jasypt
    最新版依赖<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>3.0.5</version></dependenc......
  • spring工具类
    spring工具类获取bean编写packagecom.cloudiip.security.utils;importorg.springframework.stereotype.Component;importorg.springframework.context.Applicatio......
  • org.springframework.core.metrics.ApplicationStartup
    日志Exceptioninthread"main"java.lang.NoClassDefFoundError:org/springframework/core/metrics/ApplicationStartup atorg.springframework.boot.SpringApplicat......
  • Spring@Transactional事务失效的场景
    ①未启用事务管理功能②事务方法所在类未被加载成Bean③事务方法不是public类型④事务方法被final修饰⑤事务方法被同类的方法调用⑥多线程调用⑦手动trycatch了异......
  • SpringBoot
    一、SpringBoot的入门SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程spring优化SpringBoot配置繁琐==>自......
  • docker 容器内系统时区tomcat时区修改
    现象:查看docker容器运行的项目的日志时发现时间与北京时间差8小时原因:很容易猜到是容器时区错误,使用的是协调世界时UTC,可以近似看作0时区,我们中国应该使用......
  • 不背锅运维:选择辅助容器还是另外拉起监控Pod?
    监控方案方案一对于一个Pod中只有一个业务容器的情况,可以考虑在该Pod中增加一个辅助容器,来完成对业务容器的监控。辅助容器可以使用各种监控工具的采集器,如Prometheu......
  • SpringBoot 2.6.0 以上 @Autowired 没有解决循环依赖
    使用@Autowired,仍在提示循环依赖,提示:Asalastresort,itmaybepossibletobreakthecycleautomaticallybysettingspring.main.allow-circular-referencesto......
  • 跟老杜手撕Spring6教程(十)set注入专题-1
    set注入专题本篇文章是set注入专题,上篇说了构造注入​​https://blog.51cto.com/u_15485663/6132498​​配合视频教程观看,更易理解吸收,动力节点老杜的Spring6教程采用难度逐......