1.自定义CustomDispatcherServlet
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.DispatcherServlet;
/**
* @Description: 自定义spring注解扫描
* @author MuZB
* @date 2019年7月1日 上午9:21:54
*/
public class CustomDispatcherServlet extends DispatcherServlet {
private static final long serialVersionUID = 1L;
private static CustomDispatcherServlet servlet;
private static Logger logger = LoggerFactory.getLogger("CustomDispatcherServlet");
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
servlet = this;
logger.info("SUCCESS");
}
public static void refreshServlet() {
servlet.refresh();
}
}
2.自定义CustomContextLoaderListener
import javax.servlet.ServletContextEvent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.AbstractRefreshableApplicationContext;
import org.springframework.web.context.ContextLoaderListener;
import org.springframework.web.context.support.WebApplicationContextUtils;
/**
* @Description: 自定义spring自动装配器
* @author MuZB
* @date 2019年7月1日 上午9:21:35
*/
public class CustomContextLoaderListener extends ContextLoaderListener {
private static Logger logger = LoggerFactory.getLogger("CustomContextLoaderListener");
public static ApplicationContext applicationContext;
public static ServletContextEvent servletContextEvent;
/**
* 获取spring 初始化的bean
*
* @param name
* @param requiredType
* @return
* @throws Exception
*/
public static Object getBean(String name, Class requiredType) throws Exception {
return applicationContext.getBean(name, requiredType);
}
/**
* 获取属性bean
*
* @param name
* @return
* @throws Exception
*/
public static Object getBean(String name) throws Exception {
return applicationContext.getBean(name);
}
@Override
public void contextInitialized(ServletContextEvent event) {
/** 初始化bean **/
super.contextInitialized(event);
/** 初始化context 和event **/
applicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(event.getServletContext());
servletContextEvent = event;
logger.info("SUCCESS");
}
/**
* applicationContext的reload
*/
public static void reloadApplicationContext() {
AbstractRefreshableApplicationContext abstractRefreshableApplicationContext = (AbstractRefreshableApplicationContext) applicationContext;
logger.info("start refresh the application context");
abstractRefreshableApplicationContext.refresh();
logger.info("reload the application context success");
}
3.web.xml中
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
改为
<listener-class>com.daorigin.law.util.CustomContextLoaderListener</listener-class>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
改为
<servlet-class>com.daorigin.law.util.CustomDispatcherServlet</servlet-class>
4.手动刷新,调用
//重载spring配置和注解扫描
CustomDispatcherServlet.refreshServlet();
CustomContextLoaderListener.reloadApplicationContext();