在MyFaces的JSF实现里JSF的相关工厂 (LifecycleFactory,ApplicationFactory,RenderKitFactory,FacesContextFactory 等)、JSF标准组件、Converter、Validate、及Renderer的实现类等都是通过 org.apache.myfaces.webapp.StartupServletContextListener这个
ServletContextListener类进行初始化,它需要在web.xml文件里进行配置。
这 个监听器通过org.apache.myfaces.config.FacesConfigurator这个类来取得这些工厂和标准组件的实现类。 FacesConfigurator通过配置文件org/apache/myfaces/resource/standard-faces- config.xml取得JSF标准组件、Converter、Validate、及Renderer实现类,通过META-INF/faces- config.xml取得附加的配置,通过ServletConfig初始化常量javax.faces.CONFIG_FILES的配置取得用户指定的 配置,通过/WEB-INF/faces-config.xml取得web默认的配置,配置文件的读取顺序如上描述,然后 FacesConfigurator根据这些配置值来初始化Application对象。
FacesConfigurator通过META-INF/services/<factoryName>目录下的配置文件取得对应工厂的默认实现类,目录下可以有多个配置文件,每个文件的内容都为一行实现类的全类名。
<factoryName>可以是
javax.faces.application.ApplicationFactory,
javax.faces.context.FacesContextFactory,
javax.faces.lifecycle.LifecycleFactory,
javax.faces.render.RenderKitFactory。
如果这些工厂的实现类没有在上述的文件里进行配置,是使用下面的一些默认实现
org.apache.myfaces.context.FacesContextFactoryImpl,
org.apache.myfaces.lifecycle.LifecycleFactoryImpl,
org.apache.myfaces.renderkit.RenderKitFactoryImpl。
如果NavigationHandler,PropertyResolver,StateManager,VariableResolver,ViewHandler没有指定,则分别使用默认实现
org.apache.myfaces.application.NavigationHandlerImpl,
org.apache.myfaces.el.PropertyResolverImpl,
org.apache.myfaces.application.jsp.JspStateManagerImpl,
org.apache.myfaces.el.VariableResolverImpl,
org.apache.myfaces.application.jsp.JspViewHandlerImpl。
对 于PropertyResolver及VariableResolver在初始化的时候会把指定的对象组合成一个chain。 FacesConfigurator还将配置的Renderer初始化到RenderKit中,将配置的ManagerBean及 NavigationRule初始化到RuntimeConfig中,将PhaseListener初始化到Lifecycle对象里,将 Application Listener初始化到Application对象中。