-
我们在使用监听器的时候,会用到spring配置文件创建的对象,那么我们不能像其他的类中直接使用
@Resource
或者 @AutoWired
自动注入对象,那么我们如何获取对象呢
-
比如我们在缓存数据的时候,就是在容器启动的时候读取数据库中的信息缓存在
ServletContext
中,那么我们肯定需要调用 Service
中的对象来获取数据库中的信息,此时我们就需要获取spring配置文件配置的 业务层
的对象
准备
-
前提是你的spring的配置文件是使用的
spring
监听器 ContextLoaderListener
加载的,而不是一起在springMVC的前端控制器中加载,比如你在 web.xml
配置如下
<!--配置spring配置问文件的路径-->
<context-param>
<param-name>contextConfigLocation</param-name>
<!--使用通配符指定多个配置文件,比如 spring-service.xml,spring-dao.xml-->
<param-value>classpath:spring-*.xml</param-value>
</context-param>
<!--spring监听器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
实现
-
我们先创建一个
ServletContext
上下文监听器,在其中使用 WebApplicationContextUtils
类获取 WebApplicationContext
对象,之后即可获取其中spring创建的 bean
public class InitCompontServletContextListenerimplements ServletContextListener,ServletContextAttributeListener{
private BlogIndex blogIndex; //spring配置创建的对象
private IBlogService blogService; //spring配置创建的对象
/**
* web容器初始化的时候就会调用
*/
public void contextInitialized(ServletContextEvent contextEvent){
ServletContext context=contextEvent.getServletContext(); //获取上下文对象
WebApplicationContext applicationContext=WebApplicationContextUtils.getRequiredWebApplicationContext(context);
blogIndex=applicationContext.getBean("blogIndex",BlogIndex.class); //加载BlogIndex对象
blogService=applicationContext.getBean("blogServiceImpl",IBlogService.class); //加载IBlogService对象
}
原文
https://chenjiabing666.github.io/2018/05/27/监听器获取spring配置文件创建的对象/