您的位置:首页 > 移动开发

在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类上做下手脚,我们去扩展这个类

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文件,做到了一举两得的效果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: