import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
/**
* 以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候中取出ApplicaitonContext.
*
*
*/
public class SpringContextHolder implements ApplicationContextAware {
private static ApplicationContext applicationContext;
/**
* 实现ApplicationContextAware接口的context注入函数, 将其存入静态变量.
*/
public void setApplicationContext(ApplicationContext applicationContext) {
SpringContextHolder.applicationContext = applicationContext;
}
/**
* 取得存储在静态变量中的ApplicationContext.
*/
public static ApplicationContext getApplicationContext() {
checkApplicationContext();
return applicationContext;
}
/**
* 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.
*/
@SuppressWarnings("unchecked")
public static <T> T getBean(String name) {
checkApplicationContext();
return (T) applicationContext.getBean(name);
}
/**
* 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.
* 如果有多个Bean符合Class, 取出第一个.
*/
@SuppressWarnings("unchecked")
public static <T> T getBean(Class<T> requiredType) {
checkApplicationContext();
return (T) applicationContext.getBeansOfType(requiredType);
}
/**
* 清除applicationContext静态变量.
*/
public static void cleanApplicationContext(){
applicationContext = null;
}
private static void checkApplicationContext() {
if (applicationContext == null) {
throw new IllegalStateException("applicaitonContext未注入);
}
}
}
import java.io.InputStream;
import java.util.Properties;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
* @description 初始化类,将服务器需要的东西放到缓存里
*/
@SuppressWarnings("serial")
public class InitAppContext extends HttpServlet {
Properties p = null;
/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
/**
* Initialization of the servlet. <br>
* Init application and using it in class that named "SpringContextUtil".
*
* @throws ServletException
* if an error occurs
*/
public void init() throws ServletException {
// Put your code here
ApplicationContext appcontext = WebApplicationContextUtils
.getWebApplicationContext(this.getServletContext());
SpringContextUtil springcontext = new SpringContextUtil();
springcontext.setApplicationContext(appcontext);
}
web.xml 增加servlet配置
<servlet>
<servlet-name>InitAppContext</servlet-name>
<servlet-class>
InitAppContext
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>