Hasor Init階段

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

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


現(xiàn)在我們編寫一個(gè) HelloWord Module 然后放入配置文件。然后我們啟動(dòng) 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");
    }
}


接下來我們準(zhǔn)備一個(gè) Hasor 配置文件,并且填入如下內(nèi)容:

<?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>


最后啟動(dòng) Hasor 就可以看到 Hello Module 打印在控制臺(tái)上。

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


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


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

<?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>


為了達(dá)到上面這個(gè)效果您還可以這樣設(shè)置配置文件。有關(guān)配置文件特性的細(xì)節(jié)請(qǐng)?jiān)L問配置文件相關(guān)章節(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 兩個(gè)階段。除非您是在擴(kuò)展 TemplateAppContext 否則您是無(wú)法截獲到這兩個(gè)階段調(diào)用通知的。在 Hasor 內(nèi)部 doInitializeCompleted 方法會(huì)負(fù)責(zé)通知 BeanContainer 完成對(duì)標(biāo)記了 @Init 方法的單例對(duì)象,以執(zhí)行啟動(dòng)創(chuàng)建工作。


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


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


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)