美文网首页Java技术专题
监听器获取spring配置文件创建的对象

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

作者: 爱撒谎的男孩 | 来源:发表于2018-10-07 22:28 被阅读32次

    监听器获取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 InitCompontServletContextListener implements 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对象
        }
    

    参考文章

    相关文章

      网友评论

        本文标题:监听器获取spring配置文件创建的对象

        本文链接:https://www.haomeiwen.com/subject/kbvraftx.html