读书人

瞧struts2源码之一:struts2的初始化

发布时间: 2012-09-21 15:47:26 作者: rapoo

看struts2源码之一:struts2的初始化

1、先来看struts2中的Dispatcher 的创建?

 public void init(FilterConfig filterConfig) throws ServletException {        InitOperations init = new InitOperations();        try {            FilterHostConfig config = new FilterHostConfig(filterConfig);            init.initLogging(config);            Dispatcher dispatcher = init.initDispatcher(config);            init.initStaticContentLoader(config, dispatcher);            prepare = new PrepareOperations(filterConfig.getServletContext(), dispatcher);            execute = new ExecuteOperations(filterConfig.getServletContext(), dispatcher);this.excludedPatterns = init.buildExcludedPatternsList(dispatcher);            postInit(dispatcher, filterConfig);        } finally {            init.cleanup();        }    }

?大家看到Dispatcher创建是通 ?init.initDispatcher(config);方法实现,接着向下看

     public Dispatcher initDispatcher( HostConfig filterConfig ) {        Dispatcher dispatcher = createDispatcher(filterConfig);        dispatcher.init();        return dispatcher;    }//

    //创—ispatcher之后,来看init()方法//init()方法是用来Load用户配置文件,资源文件以及默认的配置文件.

    public void init() { if (configurationManager == null) { configurationManager = createConfigurationManager(BeanSelectionProvider.DEFAULT_BEAN_NAME); } try { init_DefaultProperties(); // [1] 第一步:读取properties信息,默认的default.properties, ?? init_TraditionalXmlConfigurations(); // [2] 第二步:读取xml配置文件 init_LegacyStrutsProperties(); // [3] 第三步:读取struts.properties配置文件 init_CustomConfigurationProviders(); // [5] init_FilterInitParameters() ; // [6] 第五步:载入FilterDispatcher传进来的initParams ?? init_AliasStandardObjects() ; // [7] 第六步:将配置文件中的bean与具体的类映射 Container container = init_PreloadConfiguration(); container.inject(this); init_CheckConfigurationReloading(container); init_CheckWebLogicWorkaround(container); if (!dispatcherListeners.isEmpty()) { for (DispatcherListener l : dispatcherListeners) { l.dispatcherInitialized(this); } } } catch (Exception ex) { if (LOG.isErrorEnabled()) LOG.error("Dispatcher initialization failed", ex); throw new StrutsException(ex); } }

?分六步载入各种配置属性,都是通过ConfigurationProvider接口进行的,这个接口提供init(),destroy(),register()等方法.
? 将各种ConfigurationProvider初始化之后将实例添加到ConfigurationManager的List里面.
? 最后通过循环调用List里的这些destroy(),register()等方法实现对配置文件的属性进行注册和销毁等功能.

读书人网 >开源软件

热点推荐