各种环境下获取容器内置对象的方法

来源:互联网 发布:自学软件测试 编辑:程序博客网 时间:2024/06/16 00:27
没有加过任何支持的web项目或者普通项目,或者加过这些支持,但是并未用到,例如没有经过struts的配置文件访问,没有
经过servlet访问,没有spring bean过等等,即都是没有这些对应的容器支持,那么像request,session,application这些
对象都是拿不到的!

(我的是从spring的容器里拿application对象)那么今天看了许多文章,既然直接拿不到application对象,那么就用间接的方法
只能手动从spring容器中手动拿到,然后再赋值给自己定义的application对象
像下面这样:
    大家都说实现接口ApplicationContextAware
实现该接口的setApplicationContext(ApplicationContext context)方法,并保存ApplicationContext 对象。Spring初始化时,会通过该方法将ApplicationContext 对象注入。

但是实际操作中遇到了问题,配置了这个类,也加了SpringBean的配置,但是启动的时候,Spring没有帮我注入这个对象,这个问题我自己想了一下,觉得是因为这是一个普通类,
而不是一个spring 管理的bean ,所以它并没有直接有spring容器管理,那么这个类是没有spring环境的,所以直接是获取不到application对象的,我是这么想的,
不知道对不对,希望给大家仅供参考,以后证实了再来改正。

PS:问题解决,参考http://kewen1989.iteye.com/blog/1891124于是我就用了这样一个方法实现:


还是实现了这样一个接口:
Java代码  收藏代码

    public class ApplicationContextHelper implements ApplicationContextAware  
    {  
        private static ApplicationContext context;  
      
        @Override  
        public void setApplicationContext(ApplicationContext contex) throws BeansException  
        {  
            ApplicationContextHelper.context = contex;  
        }  
      
        public static ApplicationContext getContext()  
        {  
            return context;  
        }  
      
    }  


由于我前面遇到的问题是,spring启动的时候没有帮我注入这个ApplicationContext的对象,那么我就自己给它设进去,于是就在Spring启动的监听后面,自己加了一个监听
Java代码  收藏代码

    <listener>  
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
    </listener>  
    <listener>  
        <listener-class>com.kewen.util.GetContext</listener-class>  
    </listener>  



监听类实现如下:
Java代码  收藏代码

    public class GetContext implements ServletContextListener  
    {  
        private static WebApplicationContext webApplicationContext;  
          
        private static ApplicationContextHelper helper = new ApplicationContextHelper();  
      
        @Override  
        public void contextDestroyed(ServletContextEvent arg0)  
        {  
      
        }  
      
        @Override  
        public void contextInitialized(ServletContextEvent arg0)  
        {  
            webApplicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(arg0.getServletContext());  
            helper.setApplicationContext(webApplicationContext);    
        }  



这样我们就可以在别的地方调用ApplicationContextHelper的getContext()方法,而不需要直接经过容器来获取到需要的ApplicationContext对象了
0 0
原创粉丝点击