W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
當(dāng)您使用 Hasor 時(shí)讓框架跑起來只是第一步,您還需要一個(gè)啟動(dòng)入口用于配置您項(xiàng)目。在這個(gè)啟動(dòng)入口里您可以為您的項(xiàng)目做一些實(shí)際的設(shè)定。
在 Hasor 里一切的開始都是 net.hasor.core.Module
接口,您需要編寫一個(gè)類實(shí)現(xiàn)這個(gè)接口,接口中只有一個(gè)方法需要您實(shí)現(xiàn)。下面這段代碼就是我們實(shí)現(xiàn)的第一個(gè) Module:
public class FirstModule implements Module {
public void loadModule(ApiBinder apiBinder) throws Throwable {
...
}
}
接下來我們迫切需要的是讓 Hasor 可以加載這個(gè) Module。對于一般情況下而言我們可以在 Hasor.create 時(shí)進(jìn)行加載,例如:
Hasor.createAppContext(new FirstModule());
有時(shí)候?yàn)榱藴p少代碼行數(shù)我們會(huì)把 FirstModule 簡寫成一個(gè)匿名類,例如:
Hasor.createAppContext(new Module {
public void loadModule(ApiBinder apiBinder) throws Throwable {
...
}
});
如果您打算同時(shí)指定 Hasor 配置文件那么會(huì)變成如下寫法:
Hasor.createAppContext("my-config.xml", new FirstModule());
or
Hasor.createAppContext("my-config.xml", new Module {
public void loadModule(ApiBinder apiBinder) throws Throwable {
...
}
});
如果我有多個(gè)啟動(dòng)入口怎么辦?沒關(guān)系 Hasor 支持多個(gè)啟動(dòng)入口,你只需要按照你想要的啟動(dòng)順序排好,然后在 Hasor.createAppContext
啟動(dòng)容器時(shí)候傳遞進(jìn)去就可以了,Hasor 會(huì)自動(dòng)照顧好它們。
前面我們一直說的是如何在啟動(dòng)時(shí)候通過參數(shù)形式加載啟動(dòng)入口,現(xiàn)在我們就來想象一下如下情景。一個(gè)項(xiàng)目,按照業(yè)務(wù)緯度劃分了若干個(gè)模塊。每個(gè)模塊都可以通過 Hasor 的 Module 來管理,接下來那么為了方便開發(fā),每個(gè)模塊負(fù)責(zé)人會(huì)負(fù)責(zé)開發(fā)自己的 Module,最后在統(tǒng)一的地方進(jìn)行加載。
剛剛這個(gè)例子來說,Hasor 提供了多種方式來加載這些 Module,現(xiàn)在我們就來看看不同的加載方式和它們的優(yōu)缺點(diǎn)。
方式一: Hasor.createAppContext
在初始化 Hasor 容器時(shí)指定所有模塊。這種方式簡單粗暴,無需過多語言進(jìn)行描述。它的缺點(diǎn)比較明顯,那就是隨著項(xiàng)目復(fù)雜度的提升 Module 可能會(huì)越來越多。到時(shí)候創(chuàng)建 Hasor 會(huì)看起來很復(fù)雜。
Hasor.createAppContext("my-config.xml", new UserModule(),new ClassModule() ...);
方式二: 為了解決第一種方式中帶來的不足,我們可以預(yù)先創(chuàng)建一個(gè)總?cè)肟?,然后在總?cè)肟谥兄饌€(gè)加載所有模塊。不光如此總?cè)肟谖覀円部梢栽O(shè)置多個(gè),甚至總?cè)肟谥屑虞d的模塊可以是項(xiàng)目中其它模塊的入口。這種方式解決了 Module 的規(guī)劃和加載問題。
public class RootModule implements Module {
public void loadModule(ApiBinder apiBinder) throws Throwable {
...
apiBinder.installModule(new UserModule());
apiBinder.installModule(new ClassModule());
...
}
}
方式三: 前面提到的兩種方式最大的弊病就是,需要把要加載的模塊寫死在代碼中。倘若我有一個(gè)需求是根據(jù)實(shí)際情況來決定是否要加載,最好的辦法就是讓我們自己可以在某個(gè)地方自己配一下。而這就要用到 Hasor 配置文件中模塊管理功能。這種方式最大的好處就是模塊的加載可以和代碼解耦,在 Hasor 自身內(nèi)部就大量使用了這種方式。例如配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://project.hasor.net/hasor/schema/main">
<!-- 默認(rèn)要裝載的模塊 -->
<hasor.modules>
<module>net.hasor.web.valid.ValidWebPlugin</module>
<module>net.hasor.web.render.RenderWebPlugin</module>
<module>net.hasor.plugins.startup.StartupModule</module>
<module>net.hasor.plugins.aop.AopModule</module>
</hasor.modules>
</config>
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: