了解seam2的人知道,seam是通过在web. xml中配置监听器启动的。注意,本文中的seam是指的seam2,不是seam3.
<listener>
<listenerclass>org. jboss. seam. servlet. SeamListener</listenerclass>
</listener>
该监听器会做哪些事情呢?看看Gavin King对SeamListener类的描述。
Drives certain Seam functionality such as initialization and cleanup of application and session contexts from the web application lifecycle.
从描述中可以知道SeamListener主要完成应用以及web应用生命周期中的session上下文的初始化和清理工作。
该类实现了ServletContextListener接口,在contextInitialized(ServletContextEvent event)方法内主要初始化生命周期并完成应用的初始化,在contextDestroyed(ServletContextEvent event)方法内结束应用的生命周期。
该类实现了HttpSessionListener接口,主要是用于在生命周期中开始和结束session。
第一步,构造方法里从ServletContext获取一些路径信息:warRoot、warClassesDirectory、warLibDirectory、hotDeployDirectory。
第二步,扫描配置文件完成seam组件的初始化(Initialization的create方法)。 其中包括:添加命名空间、初始化组件、初始化Properties、初始化jndi信息。这一步,其实主要是读取一些配置文件,加载seam组件。
第三步,seam初始化过程(Initialization的init方法)。
如果组件标注为startup,则会构造其实例进行初始化。例如seam于Hibernate的集成,就可以通过此方法初始化Hibernate,对应的组件类为org. jboss. seam. persistence. HibernateSessionFactory。