在Spring应用中创建全局获取ApplicationContext对象
2012-04-16 16:58
369 查看
在Spring应用中创建全局获取ApplicationContext对象
1、需要创建一个类,实现接口ApplicationContextAware的setApplicationContext方法。
2、在创建的这个类中保存一个静态的ApplicationContext对象,然后通过静态的方法返回。
如下,下面是SpringSide的实现,供参考:
1、需要创建一个类,实现接口ApplicationContextAware的setApplicationContext方法。
2、在创建的这个类中保存一个静态的ApplicationContext对象,然后通过静态的方法返回。
如下,下面是SpringSide的实现,供参考:
/** * Copyright (c) 2005-2012 springside.org.cn * * Licensed under the Apache License, Version 2.0 (the "License"); */ package org.springside.modules.test.spring; import org.apache.commons.lang3.Validate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.DisposableBean; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; /** * 以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候取出ApplicaitonContext. * * @author calvin */ public class SpringContextHolder implements ApplicationContextAware, DisposableBean { private static ApplicationContext applicationContext = null; private static Logger logger = LoggerFactory.getLogger(SpringContextHolder.class); /** * 取得存储在静态变量中的ApplicationContext. */ public static ApplicationContext getApplicationContext() { assertContextInjected(); return applicationContext; } /** * 从静态变量applicationContext中取得Bean, 自动转型为所赋值对象的类型. */ public static <T> T getBean(String name) { assertContextInjected(); return (T) applicationContext.getBean(name); } /** * 从静态变量applicationContext中取得Bean, 自动转型为所赋值对象的类型. */ public static <T> T getBean(Class<T> requiredType) { assertContextInjected(); return applicationContext.getBean(requiredType); } /** * 清除SpringContextHolder中的ApplicationContext为Null. */ public static void clearHolder() { logger.debug("清除SpringContextHolder中的ApplicationContext:" + applicationContext); applicationContext = null; } /** * 实现ApplicationContextAware接口, 注入Context到静态变量中. */ @Override public void setApplicationContext(ApplicationContext applicationContext) { logger.debug("注入ApplicationContext到SpringContextHolder:{}", applicationContext); if (SpringContextHolder.applicationContext != null) { logger.warn("SpringContextHolder中的ApplicationContext被覆盖, 原有ApplicationContext为:" + SpringContextHolder.applicationContext); } SpringContextHolder.applicationContext = applicationContext; //NOSONAR } /** * 实现DisposableBean接口, 在Context关闭时清理静态变量. */ @Override public void destroy() throws Exception { SpringContextHolder.clearHolder(); } /** * 检查ApplicationContext不为空. */ private static void assertContextInjected() { Validate.validState(applicationContext != null, "applicaitonContext属性未注入, 请在applicationContext.xml中定义SpringContextHolder."); } }
相关文章推荐
- 在Spring应用中创建全局获取ApplicationContext对象
- 在Spring应用中创建全局获取ApplicationContext对象<未完待续>
- 在Spring应用中创建全局获取ApplicationContext对象
- 在Spring应用中创建全局获取ApplicationContext对象
- 在Spring应用中创建全局获取ApplicationContext对象
- spring容器获取DataSource对象,进行简单数据库应用
- spring架构,创建一个全局使用的application对象
- Spring 创建对象的问题,不同构造方法创建对象,使用工厂类类获取对象、单例或多例、延迟创建问题
- 从spring容器中获取已经创建好的对象
- Spring全局获取Bean实例对象
- MFC程序的启动过程——先全局对象theApp(第一入口),后WinMain(真正入口),会引爆pApp->InitInstance从而创建窗口(程序员入口)
- 数组的应用创建、存储、自定义、快速获取
- console.log的一个应用 -----用new方法生成一个img对象和document.createElement方法创建一个img对象的区别
- Spring 注解 new创建对象后失效
- 通过类名直接获取某个spring对象
- v8学习---获取全局对象成员
- 【Spring】获取资源文件+从File+从InputStream对象获取正文数据
- Spring创建对象的三种方法之一构造函数创建(源码)
- java 练习------创建线程,获取线程对象及名称,线程状态
- 一个简化版Spring对象创建工具包