學習開源項目Halo(三)

研究完Halo的國際化是怎麼實現的,接下來就是研究Halo的其他功能是怎麼實現的。對於沒有研究過項目的人來說第一步上手是不太容易,但是,經歷過前兩篇的研究,現在研究起來應該就很容易了。首先,還是先看一下它的第一個小小的功能,當我們第一次打開它的首頁http://localhost:8090的時候,它會自動重定向到http://localhost:8090/install。Halo是怎麼實現的呢?我想大家肯定都知道,就是攔截器唄,沒錯,我們看它的源代碼,在config包下WebMvcAutoConfiguration類裏

我們可以看到,重點就是這個InstallInterceptor攔截器,它攔截了所有的請求,我們進入它的攔截方法裏看一看發現,代碼也是相當的簡單就是判斷一下博客設置的屬性裏是否已經安裝,沒有就重定向到/install

   @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {

        if (StrUtil.equals(TrueFalseEnum.TRUE.getDesc(), OPTIONS.get(BlogPropertiesEnum.IS_INSTALL.getProp()))) {
            return true;
        }
        response.sendRedirect("/install");
        return false;
    }

沒錯,就是這麼簡單,可能會有人問了,這麼簡單的東西爲什麼還要拿出來說一下呢?當然是爲了湊字數啊!!!不過除了湊字數之外呢我還想吐槽一下這個springboot版本的問題,多少次了,我以前創建的sringboot2.1.1做一個demo老是不對,就是不出效果,就像這個攔截器,我跟作者一樣,都是弄個攔截器攔截所有的請求,但是它偏偏就是有問題。然後換了個springboot版本,它就好了,就上升了0.0.1個版本,就不一樣了,真真是神奇。我每次得打開三個項目,Halo、springboot2.1.1、springboot2.1.2。其中Halo用來研究項目源代碼。研究的有點心得之後就會用springboot2.1.1用來做一個demo復現一下,demo失敗還半天找不到原因的,我就用springboot2.1.2重新做一遍,一模一樣的代碼,它就能成功了。

其實,研究到這裏,我們就知道接下來該怎麼研究了,就是照着功能跟着源代碼走讀就行了,請求發過來肯定是要先進入攔截器,攔截器處理完,就進入controller,然後調用service,service層再調用持久層(repository包)這樣根據mvc的模式,就能把代碼走讀一遍,而且這個博客的業務邏輯不復雜,只要認真看大部分肯定都看得懂,我們學習的不僅是代碼怎麼寫,還要學學大佬的代碼設計、思想之類的東西。

最後我想說的是,自學雖然費時間,而且可能還會遇到很多困難,但是在這個過程中我們收穫了自學能力。隨着我們自學的東西越來越多,會發現我們學的越來越快,遇見新的東西知道怎麼上手,遇見問題知道怎麼去搜索並解決。這也是很重要的能力,可能我現在水平見識有限,這些都是淺見,看看就行了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章