当前位置:主页 > java教程 > springboot获取applicationContext servletContext

springboot如何获取applicationContext servletContext

发布:2023-03-06 08:00:01 59


为找教程的网友们整理了相关的编程文章,网友殳歆然根据主题投稿了本篇教程内容,涉及到springboot、applicationContext、servletContext、springboot、applicationContext、springboot、servletContext、springboot获取applicationContext servletContext相关内容,已被221网友关注,如果对知识点想更进一步了解可以在下方电子资料中获取。

springboot获取applicationContext servletContext

springboot获取applicationContext servletContext

今天在做一个quartz定时任务的时候,要获取servletContext。

想的是获取到request也可以,但这个定时任务不会发起请求,是定时从数据库查数据,所以request不符合场景。

然后就想到了servletContext。

但是在过程中用了很多种方式都获取不到。因为是在普通类,没有controller这种request。

网上的其他方式配置

1.servletContext servletContext = ContextLoader.getCurrentWebApplicationContext().getServletContext();

这种不行,不知道是不是版本问题,目前已失效。

2.在web.xml里面配置

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

然后获取,也不可行,不需要另行配置xml,因为使用的spring boot

解决办法

package com.pinyu.system.config;
 
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
 
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;
 
/**
 * @author ypp 创建时间:2018年10月17日 上午11:59:11
 * @Description: TODO(用一句话描述该文件做什么)
 */
@Component
@WebListener
public class SpringBeanTool implements ApplicationContextAware, ServletContextListener {
 
	/**
	 * 上下文对象实例
	 */
	private ApplicationContext applicationContext;
 
	private ServletContext servletContext;
 
	@Override
	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
		this.applicationContext = applicationContext;
	}
 
	/**
	 * 获取applicationContext
	 * 
	 * @return
	 */
	public ApplicationContext getApplicationContext() {
		return applicationContext;
	}
 
	/**
	 * 获取servletContext
	 * 
	 * @return
	 */
	public ServletContext getServletContext() {
		return servletContext;
	}
 
	/**
	 * 通过name获取 Bean.
	 * 
	 * @param name
	 * @return
	 */
	public Object getBean(String name) {
		return getApplicationContext().getBean(name);
	}
 
	/**
	 * 通过class获取Bean.
	 * 
	 * @param clazz
	 * @param <T>
	 * @return
	 */
	public <T> T getBean(Class<T> clazz) {
		return getApplicationContext().getBean(clazz);
	}
 
	/**
	 * 通过name,以及Clazz返回指定的Bean
	 * 
	 * @param name
	 * @param clazz
	 * @param <T>
	 * @return
	 */
	public <T> T getBean(String name, Class<T> clazz) {
		Assert.hasText(name, "name为空");
		return getApplicationContext().getBean(name, clazz);
	}
 
	@Override
	public void contextInitialized(ServletContextEvent sce) {
		this.servletContext = sce.getServletContext();
	}
 
	@Override
	public void contextDestroyed(ServletContextEvent sce) {
 
	}
 
}

这样其他地方照样可以直接注入随时获取使用

一个是实现了监听器在监听器初始化的时候获取ServletContext ,一个是spring初始化的时候获取ApplicationContext 

当然也可以只实现监听器就可以的。也可以获取到ApplicationContext,spring早就为我们写好了,WebApplicationContextUtils.getRequiredWebApplicationContext();

看源码

获取到的是WebApplicationContext,WebApplicationContext继承ApplicationContext

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持码农之家。


参考资料

相关文章

  • SpringBoot自定义MessageConvert详细讲解

    发布:2023-03-06

    正在学习SpringBoot,在自定义MessageConverter时发现:为同一个返回值类型配置多个MessageConverter时,可能会发生响应数据格式错误,或406异常(客户端无法接收相应数据)。在此记录一下解决问题以及追踪源码的过程


  • 如何使用Spring integration在Springboot中集成Mqtt详解

    发布:2023-03-25

    MQTT是多个客户端通过一个中央服务器传递信息的多对多协议,能高效地将信息分发给一个或多个订阅者,下面这篇文章主要给大家介绍了关于如何使用Spring integration在Springboot中集成Mqtt的相关资料,需要的朋友可以参考下


  • Springboot与vue实现数据导出方法具体介绍

    发布:2023-04-09

    这篇文章主要介绍了Springboot与vue实现数据导出方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧


  • springboot在idea下debug调试热部署问题

    发布:2023-04-12

    这篇文章主要介绍了springboot在idea下debug调试热部署问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教


  • springboot执行延时任务之DelayQueue实例

    发布:2023-04-04

    这篇文章主要介绍了springboot执行延时任务之DelayQueue实例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教


  • Springboot项目平滑关闭及自动化关闭脚本详解

    发布:2020-02-04

    这篇文章主要为大家详细介绍了Springboot项目平滑关闭及自动化关闭脚本,具有一定的参考价值,感兴趣的小伙伴们可以参考一下


  • SpringBoot@DeleteMapping(/xxx/{id})请求报405的解决

    发布:2023-03-05

    这篇文章主要介绍了SpringBoot@DeleteMapping(/xxx/{id})请求报405的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教


  • SpringBoot与Spring之间的对比

    发布:2023-03-26

    这篇文章主要介绍了SpringBoot与Spring之间的对比,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教


网友讨论