SpringMvc中是如何对策略进行初始化的

我们对DispatcherServlet进行初始化的过程中,会有对他进行监听器的注册操作。

wac.addApplicationListener(new SourceFilteringListener(wac, new ContextRefreshListener()));

	public void addApplicationListener(ApplicationListener<?> listener) {
		if (this.applicationEventMulticaster != null) {
			this.applicationEventMulticaster.addApplicationListener(listener);
		}
		else {
			this.applicationListeners.add(listener);
		}
	}

在SouceFilteringListener中,它将具体的操作交给了他的代理实现。也就是我们当初传入的ContextRefreshListener实例。而这个类是FrameworkServlet的内部类。

	protected void onApplicationEventInternal(ApplicationEvent event) {
		if (this.delegate == null) {
			throw new IllegalStateException(
					"Must specify a delegate object or override the onApplicationEventInternal method");
		}
		this.delegate.onApplicationEvent(event);
	}
	private class ContextRefreshListener implements ApplicationListener<ContextRefreshedEvent> {

		public void onApplicationEvent(ContextRefreshedEvent event) {
			FrameworkServlet.this.onApplicationEvent(event);
		}
	}
在FrameworkServlet中,执行onApplicationEvent方法,而其中的onRefresh在此类是空的,由DispatcherServlet覆盖。
	public void onApplicationEvent(ContextRefreshedEvent event) {
		this.refreshEventReceived = true;
		onRefresh(event.getApplicationContext());
	}

在DispatcherServlet中

	@Override
	protected void onRefresh(ApplicationContext context) {
		initStrategies(context);
	}

	/**
	 * Initialize the strategy objects that this servlet uses.
	 * <p>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);
	}
所以总结就是在初始化Servlet的过程中,策略的初始化就已经开始了。并且是在Spring的AbstractApplicationContext的refresh方法执行完finishRefresh触发的。

猜你喜欢

转载自blog.csdn.net/u013828625/article/details/80326120
今日推荐