Java tutorial
/** * Copyright (c) 2005-2012 https://github.com/zhangkaitao * * Licensed under the Apache License, Version 2.0 (the "License"); */ package com.collin.joyous.web.util; import javax.servlet.http.HttpServletRequest; 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; import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; public final class SpringUtil implements ApplicationContextAware, DisposableBean { private static ApplicationContext applicationContext = null; private static Logger logger = LoggerFactory.getLogger(SpringUtil.class); /** * ?????ApplicationContext. */ public static ApplicationContext getApplicationContext() { assertContextInjected(); return applicationContext; } /** * ????applicationContext?Bean, . */ @SuppressWarnings("unchecked") 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); } /** * SpringContextHolderApplicationContextNull. */ public static void clearHolder() { logger.debug("SpringContextHolderApplicationContext:" + applicationContext); applicationContext = null; } /** * ApplicationContextAware?, Context????. */ @Override public void setApplicationContext(ApplicationContext applicationContext) { // logger.debug("ApplicationContextSpringContextHolder:{}", // applicationContext); if (SpringUtil.applicationContext != null) { logger.warn("SpringContextHolderApplicationContext, ApplicationContext:" + SpringUtil.applicationContext); } SpringUtil.applicationContext = applicationContext; // NOSONAR } /** * DisposableBean?, Context?????. */ @Override public void destroy() throws Exception { SpringUtil.clearHolder(); } /** * ApplicationContext?. */ private static void assertContextInjected() { Validate.validState(applicationContext != null, "applicaitonContext, applicationContext.xmlSpringContextHolder."); } /** * ?HttpServletRequest * * @return */ public static HttpServletRequest getRequest() { RequestAttributes ra = RequestContextHolder.getRequestAttributes(); HttpServletRequest request = ((ServletRequestAttributes) ra).getRequest(); return request; } }