SpringMvc组件初始化
2021-06-04 06:04
标签:设置 springmvc for frame EAP objects dap cti rgs SpringMVC 9大组件初始化 由上面的断点流程,可以看出来其实是在spring容器初始化完成的最后一步,通过发送event事件 然后进入下面的SimpleApplicationEventMulticaster的类中,去遍历所有的监听类 onApplicationEvent这个方法一直被重写,最后执行的是FrameworkServlet的onApplicationEvent方法,在去调用DispatcherServlet的onRefresh方法。 May be overridden in subclasses in order to initialize further strategy objects.
*/
protected void initStrategies(ApplicationContext context) {
initMultipartResolver(context);
initLocaleResolver(context);
initThemeResolver(context);
initHandlerMappings(context);
initHandlerAdapters(context);
initHandlerExceptionResolvers(context);
initRequestToViewNameTranslator(context);
initViewResolvers(context);
initFlashMapManager(context);
}
再去初始化9大组件,这里就简单的介绍其中的一个组件的初始化过程。 其中:detectAllHandlerMappings这个值为true,也可以在配置文件里面设置false,当true的时候,值为下面。 其中:this.handlerMappings == null,当走进这个方法的时候,回去读取配置文件中默认的处理器映射器。 其中 回去加载配置文件里面的默认值。 先简单的记录一下,等后面在结合SpringMVC源码的书,在进行补充。 个人感觉这个工具类还是挺有用的,其中springboot的自动配置原理也有用到,下面就简单测试一下。 我这里是idea,跑起来的时候,直接报错,然后百度了一下,要在pom.xml配置.因为IDEA有个配置项,默认只把.class的文件放到编译目录中,也就是target目录。 SpringMvc组件初始化 标签:设置 springmvc for frame EAP objects dap cti rgs 原文地址:https://www.cnblogs.com/dalianpai/p/14660365.html@Override
public void publishEvent(ApplicationEvent event) {
Assert.notNull(event, "Event must not be null");
if (logger.isTraceEnabled()) {
logger.trace("Publishing event in " + getDisplayName() + ": " + event);
}
getApplicationEventMulticaster().multicastEvent(event);
if (this.parent != null) {
this.parent.publishEvent(event);
}
}
@Override
@SuppressWarnings({ "unchecked", "rawtypes" })
public void multicastEvent(final ApplicationEvent event) {
for (final ApplicationListener listener : getApplicationListeners(event)) {
Executor executor = getTaskExecutor();
if (executor != null) {
executor.execute(new Runnable() {
@Override
public void run() {
listener.onApplicationEvent(event);
}
});
}
else {
listener.onApplicationEvent(event);
}
}
}
@Override
protected void onRefresh(ApplicationContext context) {
initStrategies(context);
}
/**
* Initialize the strategy objects that this servlet uses.
*
private void initHandlerMappings(ApplicationContext context) {
this.handlerMappings = null;
if (this.detectAllHandlerMappings) {
// Find all HandlerMappings in the ApplicationContext, including ancestor contexts.
Map
protected
private static final Properties defaultStrategies;
static {
// Load default strategy implementations from properties file.
// This is currently strictly internal and not meant to be customized
// by application developers.
try {
ClassPathResource resource = new ClassPathResource(DEFAULT_STRATEGIES_PATH, DispatcherServlet.class);
defaultStrategies = PropertiesLoaderUtils.loadProperties(resource);
}
catch (IOException ex) {
throw new IllegalStateException("Could not load ‘DispatcherServlet.properties‘: " + ex.getMessage());
}
}
/**
* @author WGR
* @create 2021/4/14 -- 22:27
*/
public class Test {
@SneakyThrows
public static void main(String[] args) {
ClassPathResource resource = new ClassPathResource("test.properties", Test.class);
Properties properties = PropertiesLoaderUtils.loadProperties(resource);
System.out.println(properties.getProperty("org.springframework.web.servlet.HandlerAdapter"));
}
}
org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter, org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter, org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter