今天在阅读Servlet3.0.1规范时,在讲述Servlet的生命周期的章节发现一个框架设计时须要注意的点,在这里整理一下。框架
我认为,框架和库的不一样点在于“控制流的走向”。
当咱们使用一个库,控制流从咱们的代码流向库代码,而后从库代码再流回咱们的代码。当咱们使用一个框架时,控制流同框架开始,流向咱们的代码,最终又回到了框架的代码。这意味着当咱们使用一个框架时,咱们完成的组件的生命周期是由框架来管理的。在Servlet的场景下,Servlet是框架,咱们实现的Servlet是组件。因此Servlet的生命周期由框架管控。Servlet的总共由三个生命周期的方法:设计
init(ServletConfig):void; Service(ServletRequest, ServletResponse):void; destroy():void;
Servlet规范中表述时提到,static initialization methods 不一样于init(ServletConfig):void方法。这里的缘由很好理解:当类被加载时静态初始化方法被调用。这是可能运行时环境尚未准备好,因此开发者应该避免在静态初始化方法中进行一些依赖容器的操做。
这里启发了我,做为框架的使用者,若是框架没有为咱们初始化生命周期的钩子,咱们能够经过静态初始化方法来完成这个操做。可是须要注意,这时环境可能不完善。
做为框架的做者,咱们应该设计好组件的生命周期管理工做,同时在文档中写清楚静态初始化方法这种操做带来的问题。code