springboot如何获取applicationContext servletContext

 更新时间:2023年01月12日 10:36:15   作者:ypp91zr  
这篇文章主要介绍了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

总结

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

相关文章

  • Spring框架学习之AOP详解

    Spring框架学习之AOP详解

    这篇文章主要介绍了Spring框架学习之AOP详解,文中有非常详细的代码示例,对正在学习Spring框架的小伙伴们有一定的帮助,需要的朋友可以参考下
    2021-05-05
  • 浅谈String类型等值比较引起的“==”、“equals()”和“hashCode”思考

    浅谈String类型等值比较引起的“==”、“equals()”和“hashCode”思考

    这篇文章主要介绍了浅谈String类型等值比较引起的“==”、“equals()”和“hashCode”思考。具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • 详谈jvm线程栈空间内存分配位置

    详谈jvm线程栈空间内存分配位置

    这篇文章主要介绍了jvm线程栈空间内存分配位置,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • 基于SpringBoot使用MyBatis插件的问题

    基于SpringBoot使用MyBatis插件的问题

    MyBatis-Plus并不能为我们解决所有问题,例如一些复杂的SQL,多表联查,我们就需要自己去编写代码和SQL语句,我们该如何快速的解决这个问题呢,这个时候可以使用MyBatisX插件,今天小编给大家带来了SpringBoot使用MyBatis插件问题,感兴趣的朋友一起看看吧
    2022-03-03
  • java下载指定文件并返回给前端返回流文件的实现步骤

    java下载指定文件并返回给前端返回流文件的实现步骤

    在Java中我们可以根据文件地址返回一个文件流,以便对文件进行读取、写入等操作,下面这篇文章主要给大家介绍了关于java下载指定文件并返回给前端返回流文件的实现步骤,需要的朋友可以参考下
    2024-03-03
  • 本地安装Nacos的踩坑过程及解决

    本地安装Nacos的踩坑过程及解决

    这篇文章主要介绍了本地安装Nacos的踩坑过程及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • java 源码分析Arrays.asList方法详解

    java 源码分析Arrays.asList方法详解

    这篇文章主要介绍了java 源码分析Arrays.asList方法详解的相关资料,需要的朋友可以参考下
    2016-10-10
  • Java如何实现图片裁剪预览功能

    Java如何实现图片裁剪预览功能

    通常注册账户上传用户图像时需要进行预览,这篇文章就是教我们如何用 Java 实现图片裁剪预览功能,需要的朋友可以参考下
    2015-07-07
  • Java设计模式编程中简单工厂与抽象工厂模式的使用实例

    Java设计模式编程中简单工厂与抽象工厂模式的使用实例

    这篇文章主要介绍了Java设计模式编程中简单工厂与抽象工厂模式的使用实例,简单工厂与抽象工厂都可以归类于设计模式中的创建型模式,需要的朋友可以参考下
    2016-04-04
  • Java编写网络聊天程序实验

    Java编写网络聊天程序实验

    这篇文章主要为大家详细介绍了Java编写网络聊天程序实验,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08

最新评论