您的位置:首页 > 其它

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

2015-01-20 08:37 357 查看
没有加过任何支持的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对象了

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐