Hasor Init階段

2018-10-04 12:28 更新
  • findModules :查找所有可以加載的 Module。
  • doInitialize :執(zhí)行 init 階段的起始標志。
  • newApiBinder :創(chuàng)建 Module 在執(zhí)行 loadModule 方法時用到的 ApiBinder 參數(shù)。
  • installModule :加載每一個 Module。
  • doBind :容器級的初始化操作
  • doInitializeCompleted :執(zhí)行 init 階段的終止標志。

findModules,這個階段的目的是找出所有配置文件中的 Module 并創(chuàng)建它們,這些 Module 將會在 installModule 階段中加載它們。


現(xiàn)在我們編寫一個 HelloWord Module 然后放入配置文件。然后我們啟動 Hasor 讓 findModules 來加載我們的 Module。首先我們創(chuàng)建 Module。

package net.test.hasor;
public class HelloModule implements Module {
    public void loadModule(ApiBinder apiBinder) throws Throwable {
        System.out.println("Hello Module");
    }
}


接下來我們準備一個 Hasor 配置文件,并且填入如下內容:

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://project.hasor.net/hasor/schema/main">
    <hasor.modules>
        <module>net.test.hasor.HelloModule</module>
    </hasor.modules>
</config>


最后啟動 Hasor 就可以看到 Hello Module 打印在控制臺上。

Hasor.createAppContext("my-config.xml");


Hasor 的很多套件都是通過這種方式進入啟動流程,即便是您沒有做過絲毫配置。例如:RSF。


如果您想要一個最純粹的 Hasor,不希望它在初始化時加載任何插件,您可以通過 HASOR_LOAD_MODULE 環(huán)境變量禁用 findModules。例如:下面這個配置中 HelloModule 就不會被加載,同時任何一個內置的 Module 都不會被加載。

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://project.hasor.net/hasor/schema/main">
    <hasor>
        <environmentVar>
            <!-- 是否加載模塊 -->
            <HASOR_LOAD_MODULE>false</HASOR_LOAD_MODULE>
        </environmentVar>
        <modules>
            <module>net.test.hasor.HelloModule</module>
        </modules>
    </hasor>
</config>


為了達到上面這個效果您還可以這樣設置配置文件。有關配置文件特性的細節(jié)請訪問配置文件相關章節(jié)。

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://project.hasor.net/hasor/schema/main">
    <hasor.modules loadModule="false">
        <module>net.test.hasor.HelloModule</module>
    </hasor.modules>
</config>


doInitializedoInitializeCompleted 兩個階段。除非您是在擴展 TemplateAppContext 否則您是無法截獲到這兩個階段調用通知的。在 Hasor 內部 doInitializeCompleted 方法會負責通知 BeanContainer 完成對標記了 @Init 方法的單例對象,以執(zhí)行啟動創(chuàng)建工作。


newApiBinder 本質上是創(chuàng)建 ApiBinder 接口對象的過程。在 Hasor3 之后,由于 ApiBinder 擴展機制的引入,newApiBinder 變得與 findModules 同樣重要。有關 ApiBinder 的內容在后面的 ApiBinder 章節(jié)會深入講解。


installModule 階段是循環(huán)所有已知 Module 并執(zhí)行它們的 loadModule 方法去初始化它們。


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號