在B/S系统中得到spring的ApplicationContext对象的一点小技巧
2013-05-22 14:09
330 查看
在网上看了好多种得到spring的ApplicationContext对象的方法,在B/S系统,我们通常有时在整个系统中都需要这个对象去得到bean对象等等,但是看到很多人做的方法是将首先加载一次application.xml文件加载一次,后面又通过另外的出来为了得到applicationContext对象又去专门做个公共的类处理得到applicationContext对象,这样的话相当于把application.xml文件加载两次。为了解决这个加载两次的问题,有个小的技巧如下:
1:在我们的B/S系统中通常的配置是在web.xml文件中spring的监听
<!-- 定义Spring监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
此时可以在添加配置监听的ContextLoaderListener类上做下手脚,我们去扩展这个类
ServiceLocator的代码如下:
2:此时web.xml的配置就变成了
<!-- 定义Spring监听器 -->
<listener>
<listener-class>com.kms.framework.core.utils.context.ContextLoaderListener</listener-class>
</listener>
这样就在整个系统中通过ServiceLocator类的getContext()方法得到ApplicationContext对象了,这样就不必要加载两次spring的application.xml文件,做到了一举两得的效果
1:在我们的B/S系统中通常的配置是在web.xml文件中spring的监听
<!-- 定义Spring监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
此时可以在添加配置监听的ContextLoaderListener类上做下手脚,我们去扩展这个类
package com.kms.framework.core.utils.context; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import org.springframework.context.ApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; public class ContextLoaderListener extends org.springframework.web.context.ContextLoaderListener { //重写父类的contextInitialized方法 @Override public void contextInitialized(ServletContextEvent event) { super.contextInitialized(event); //通过这样得到ApplicationContext ServletContext context = event.getServletContext(); ApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(context); //将ApplicationContext设置到自己定义的类中 ServiceLocator.setContext(ctx); } }
ServiceLocator的代码如下:
package com.kms.framework.core.utils.context; import com.kms.framework.core.exception.level.KmsException; import com.kms.framework.core.exception.ExceptionKey; import org.springframework.context.ApplicationContext; public class ServiceLocator { /** * spring ApplicationContext */ private static ApplicationContext context; protected ServiceLocator() { } public static Object getBean(String beanName){ try { return context.getBean(beanName); } catch (Exception e) { throw new KmsException(ExceptionKey.CONTEXT_LOAD_ERROR,e); } } /** * @return the context */ public static ApplicationContext getContext() { return context; } /** * @param context the context to set */ public static void setContext(ApplicationContext context) { ServiceLocator.context = context; } }
2:此时web.xml的配置就变成了
<!-- 定义Spring监听器 -->
<listener>
<listener-class>com.kms.framework.core.utils.context.ContextLoaderListener</listener-class>
</listener>
这样就在整个系统中通过ServiceLocator类的getContext()方法得到ApplicationContext对象了,这样就不必要加载两次spring的application.xml文件,做到了一举两得的效果
相关文章推荐
- Spring - 使用ApplicationContextAware得到一个ApplicationContext对象
- spring中得到servletContext对象方法
- Spring - 使用ApplicationContextAware得到一个ApplicationContext对象
- Dubbo+Spring+MyBaits客户端得到对象的属性为空
- 自己做列车查询系统得到的一点知识,只求以后好自己看
- Spring - 使用ApplicationContextAware得到一个ApplicationContext对象
- session监听器中得到spring中的bean对象
- Spring - 使用ApplicationContextAware得到一个ApplicationContext对象
- Spring - 使用ApplicationContextAware得到一个ApplicationContext对象
- 【系统学习SpringBoot】SpringBoot 对象转JSON输出
- Spring - 使用ApplicationContextAware得到一个ApplicationContext对象
- ssh下:系统初始化实现ServletContextListener接口时,获取spring中数据层对象无效的问题
- Silverlight小技巧--如何得到Rectangle对象背景色
- spring2.0中使用Aspect方式进行AOP如何得到method对象
- spring 如何取的IOC容器得到里面的对象进行操作
- 重装系统后安装驱动的一点小技巧
- 黑马程序员--09.动态与代理AOP--06【动态代理实例化的过程升级--目标对象+系统功能的参数化】【实现类似Spring的可配置AOP框架】
- Spring - 使用ApplicationContextAware得到一个ApplicationContext对象
- 局部变量也能使用Spring工厂得到对象
- Spring之条件注解@Conditional,条件(系统)不同注入的对象也不同。