转载

监听器获取spring配置文件创建的对象

  • 我们在使用监听器的时候,会用到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配置文件创建的对象/
正文到此结束
Loading...