亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行ContextLoaderListener分析

發布時間:2021-12-08 17:50:40 來源:億速云 閱讀:174 作者:柒染 欄目:大數據

如何進行ContextLoaderListener分析,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

每一個整合spring框架的項目中,總是不可避免地要在web.xml中加入這樣一段配置。

<!-- 讀取spring配置文件 開始 -->
<context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>
       classpath*:conf/applicationContext.xml
   </param-value>
</context-param>
<listener>
   <listener-class>
    org.springframework.web.context.ContextLoaderListener
   </listener-class>
</listener>
但是很多同學并不清楚它到底有什么作用。
web.xml的配置文件,在啟動Web 容器時,自動裝配Spring applicationContext.xml 
的配置信息。
我們研究一下ContextLoaderListener源碼。
ContextLoaderListener繼承自ContextLoader,實現的是ServletContextListener接口。
public class ContextLoaderListener extends ContextLoader implements 
ServletContextListener {
      public ContextLoaderListener() {}
   public ContextLoaderListener(WebApplicationContext context) {        super(context);    }    public void contextInitialized(ServletContextEvent event) {         this.initWebApplicationContext(event.getServletContext());    }    public void contextDestroyed(ServletContextEvent event) {        this.closeWebApplicationContext(event.getServletContext());      ContextCleanupListener.cleanupAttributes(event.getServletContext());   }
 }
ContextLoaderListener可以指定在Web應用程序啟動時載入Ioc容器,正是通過
ContextLoader來實現的,ContextLoader來完成實際的WebApplicationContext,
也就是Ioc容器的初始化工作。

ContextLoaderListener的作用就是啟動Web容器時,讀取在contextConfigLocation中定義的xml文件,自動裝配ApplicationContext的配置信息,并產生WebApplicationContext對象,然后將這個對象放置ServletContext

的屬性里,這樣我們只要得到Servlet就可以得到WebApplicationContext對象,并利用這個對象訪問spring容器管理的bean。簡單來說,就是上面這段配置為項目提供了spring支持,初始化了Ioc容器。

在上下文創建時調用的方法是public void contextInitialized(ServletContextEvent event)。它通過傳遞給它所接收到的servlet上下文(從事件參數獲取event.getServletContext())來調用ContextLoader的initWebApplicationContext方法。initWebApplicationContext方法進行的第一個操作是檢查是否有另一個根上下文存在。如果至少存在另一個,則拋出IllegalStateException,并且初始化失敗。否則,它繼續初始化

org.springframework.web.context.WebApplicationContext實例。如果初始化的實例實現了ConfigurableWebApplicationContext接口,則在設置當前應用程序上下文之前,加載器將進行一些設置服務(父上下文,應用程序上下文,servlet上下文等),并通過上下文的refresh()方法來準備bean

ContextLoaderListener中第二個我們需要關注的方法是public void contextDestroyed(ServletContextEvent event)。每當加載程序的上下文關閉時都會調用它。這個方法干了兩件事情:

  • 通過ContextLoader中的closeWebApplicationContext(),它關閉應用程序上下文。通過ConfigurableWebApplicationContext close()方法完成上下文關閉。上下文的銷毀的過程其實就是銷毀bean和關閉bean工廠,此處參考org.springframework.context.support.AbstractApplicationContext中的源碼。

  • 調用

    ContextCleanupListener.cleanupAttributes(event.getServletContext()),它將查找當前servlet上下文的所有實現org.springframework.beans.factory.DisposableBean接口的對象。之后,將調用它們的destroy()方法,以銷毀不再使用的bean。

ServletContextListener 是 ServletContext 的監聽者,如果 ServletContext 

發生變化,如服務器啟動時ServletContext 被創建,服務器關閉時 

ServletContext 將要被銷毀。

ServletContext 被 Servlet 程序用來與 Web 容器通信。例如寫日志,轉發請求。每一個 Web 應用程序含有一個Context ,被Web 應用內的各個程序共享。因為Context 可以用來保存資源并且共享,所以我所知道ServletContext 

的最大應用是Web 緩存---- 把不經常更改的內容讀入內存,所以服務器響應請求的時候就不需要進行慢速的磁盤I/O 了。

 在JSP 文件中,application 是 ServletContext 的實例,由JSP 容器默認創建。Servlet 中調用getServletContext() 方法得到 ServletContext 的實例。

我們使用緩存的思路大概是:

       1. 服務器啟動時,ServletContextListener 的 contextInitialized() 方法被調用,所以在里面創建好緩存。可以從文件中或者從數據庫中讀取取緩存內容生成類,用 ervletContext.setAttribute() 方法將緩存類保存在ServletContext 的實例中。

       2. 程序使用 ServletContext.getAttribute() 讀取緩存。如果是 JSP ,使用a pplication.getAttribute() 。如果是Servlet ,使用 getServletContext().getAttribute() 。如果緩存發生變化( 如訪問計數) ,你可以同時更改緩存和文件/ 數據庫。或者你等 變化積累到一定程序再保存,也可以在下一步保存。

       3. 服務器將要關閉時,ServletContextListener 的 contextDestroyed() 方法被調用,所以在里面保存緩存的更改。將更改后的緩存保存回文件或者數據庫,更新原來的內容。

看完上述內容,你們掌握如何進行ContextLoaderListener分析的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新宾| 基隆市| 惠州市| 呼伦贝尔市| 肇庆市| 呈贡县| 凤庆县| 邛崃市| 兖州市| 泰顺县| 喀什市| 铅山县| 泽州县| 安化县| 易门县| 巴彦淖尔市| 武隆县| 湄潭县| 巍山| 库尔勒市| 微山县| 颍上县| 应城市| 南丹县| 永兴县| 屏南县| 新野县| 安福县| 新巴尔虎右旗| 安陆市| 永春县| 锡林郭勒盟| 那坡县| 巢湖市| 历史| 惠东县| 通辽市| 江达县| 霍山县| 定结县| 桦甸市|