国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

180807-Quick-Task 動(dòng)態(tài)腳本支持框架之Groovy腳本加載執(zhí)行

suemi / 1335人閱讀

摘要:動(dòng)態(tài)腳本支持框架之腳本加載執(zhí)行上一篇簡(jiǎn)答說(shuō)了如何判斷有任務(wù)動(dòng)態(tài)添加刪除或更新,歸于一點(diǎn)就是監(jiān)聽(tīng)文件的變化,判斷目錄下的文件是否有新增刪除和改變,從而判定是否有任務(wù)的變更接下來(lái)的問(wèn)題就比較明顯了,當(dāng)任務(wù)變更之后,就需要重新加載任務(wù)了,即如何

Quick-Task 動(dòng)態(tài)腳本支持框架之Groovy腳本加載執(zhí)行

上一篇簡(jiǎn)答說(shuō)了如何判斷有任務(wù)動(dòng)態(tài)添加、刪除或更新,歸于一點(diǎn)就是監(jiān)聽(tīng)文件的變化,判斷目錄下的Groovy文件是否有新增刪除和改變,從而判定是否有任務(wù)的變更;

接下來(lái)的問(wèn)題就比較明顯了,當(dāng)任務(wù)變更之后,就需要重新加載任務(wù)了,即如何動(dòng)態(tài)的編譯并執(zhí)行Groovy文件呢?

相關(guān)系列博文:

180628-Quick-Task 動(dòng)態(tài)任務(wù)執(zhí)行框架想法篇

180702-Quick-Task 動(dòng)態(tài)腳本支持框架整體介紹篇

180723-Quick-Task 動(dòng)態(tài)腳本支持框架之結(jié)構(gòu)設(shè)計(jì)篇

180729-Quick-Task 動(dòng)態(tài)腳本支持框架之任務(wù)動(dòng)態(tài)加載

I. Groovy文件動(dòng)態(tài)加載

要想動(dòng)態(tài)加載類(lèi),可以怎么辦?如果對(duì)JVM有一定了解的朋友可能知道,自定義一個(gè)ClassLoader,可以實(shí)現(xiàn)從文件/網(wǎng)絡(luò)/DB/Jar包中讀取class文件,而Groovy,動(dòng)態(tài)語(yǔ)言,簡(jiǎn)單來(lái)說(shuō)就是.groovy文件可以直接運(yùn)行,那么我們編碼中要怎么玩?

1. 依賴

讓我自己來(lái)實(shí)現(xiàn)Groovy文件的編譯執(zhí)行,目前基本上是看不到啥希望的,所以果斷的借助第三方工具類(lèi)加載Groovy文件

pom文件添加依賴


    org.codehaus.groovy
    groovy-all
    2.4.3
2. 加載Groovy

直接利用上面jar包中提供的GroovyCalssLoader來(lái)加載Groovy文件即可,使用也比較簡(jiǎn)單

@Slf4j
public class GroovyCompile {

    @SuppressWarnings("unchecked")
    public static  T compile(File codeSource, Class interfaceType, ClassLoader classLoader)
            throws CompileTaskScriptException {
        try {
            GroovyClassLoader loader = new GroovyClassLoader(classLoader);
            Class clz = loader.parseClass(codeSource);

            // 接口校驗(yàn)
            if (!interfaceType.isAssignableFrom(clz)) {
                throw new CompileTaskScriptException("illegal script type!");
            }

            return (T) clz.newInstance();
        } catch (IOException e) {
            log.error("load code from {} error! e: {}", codeSource, e);
            throw new CompileTaskScriptException("load code from " + codeSource + " error!");
        } catch (CompileTaskScriptException e) {
            throw e;
        } catch (Exception e) {
            log.error("initial script error! codePath: {}, e: {}", codeSource, e);
            throw new CompileTaskScriptException(
                    "initial script error! clz: " + codeSource + " msg: " + e.getMessage());
        }
    }
}

上面看著挺多,關(guān)鍵地方就三行,編譯為class對(duì)象之后,借助反射來(lái)創(chuàng)建對(duì)象

GroovyClassLoader loader = new GroovyClassLoader(classLoader);
Class clz = loader.parseClass(codeSource);
return (T) clz.newInstance();

另外還有一行,也可以順帶湊一眼,判斷一個(gè)class是否為另一個(gè)class的子類(lèi),用的是

interfaceType.isAssignableFrom(clz)

而判斷某個(gè)對(duì)象是否為某類(lèi)的子類(lèi)用的則是 instance of

3. 調(diào)用包裝

上面既然提供了一個(gè)工具類(lèi),那么接上篇的獲取變動(dòng)文件之后,獲取File對(duì)象,借此拿到任務(wù)對(duì)象,就比較清晰了

@Slf4j
public class ScriptLoadUtil {

    public static ITask loadScript(File file) {
        try {
            return GroovyCompile.compile(file, ITask.class, ScriptLoadUtil.class.getClassLoader());
        } catch (CompileTaskScriptException e) {
            log.error("un-expect error! e: {}", e);
            return null;
        }
    }
}
4. 小結(jié)

本篇內(nèi)容比較簡(jiǎn)單,知識(shí)點(diǎn)也沒(méi)多少,一個(gè)是利用GroovyClassLoader來(lái)編譯Groovy文件并獲取實(shí)例;另一個(gè)就是如何判斷一個(gè)class是否為另一個(gè)class的子類(lèi)

還有一個(gè)隱藏的點(diǎn)上面沒(méi)有說(shuō),那就是上面的GroovyCompile文件中,每次加載Groovy文件時(shí),都是新創(chuàng)建了一個(gè)GroovyClassLoader,并由它來(lái)加載并實(shí)例Groovy任務(wù),那么問(wèn)題來(lái)了

能否用一個(gè)GoorvyClassLoader來(lái)管理所有的Groovy任務(wù)呢?

上面的代碼實(shí)現(xiàn)中,不同的Groovy任務(wù)之間,可以相互通信么?

針對(duì)上面的問(wèn)題,暫不給出答案,后面再說(shuō)

II. 其他 0. 相關(guān)

博文:

180628-Quick-Task 動(dòng)態(tài)任務(wù)執(zhí)行框架想法篇

180702-Quick-Task 動(dòng)態(tài)腳本支持框架整體介紹篇

180723-Quick-Task 動(dòng)態(tài)腳本支持框架之結(jié)構(gòu)設(shè)計(jì)篇

180729-Quick-Task 動(dòng)態(tài)腳本支持框架之任務(wù)動(dòng)態(tài)加載

項(xiàng)目:

https://github.com/liuyueyi/quick-task

1. 一灰灰Blog: https://liuyueyi.github.io/he...

一灰灰的個(gè)人博客,記錄所有學(xué)習(xí)和工作中的博文,歡迎大家前去逛逛

2. 聲明

盡信書(shū)則不如,已上內(nèi)容,純屬一家之言,因個(gè)人能力有限,難免有疏漏和錯(cuò)誤之處,如發(fā)現(xiàn)bug或者有更好的建議,歡迎批評(píng)指正,不吝感激

微博地址: 小灰灰Blog

QQ: 一灰灰/3302797840

3. 掃描關(guān)注

小灰灰Blog&公眾號(hào)

知識(shí)星球

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/76649.html

相關(guān)文章

  • 180723-Quick-Task 動(dòng)態(tài)腳本支持框架結(jié)構(gòu)設(shè)計(jì)篇

    摘要:動(dòng)態(tài)腳本支持框架之結(jié)構(gòu)設(shè)計(jì)篇相關(guān)博文動(dòng)態(tài)腳本支持框架整體介紹篇?jiǎng)討B(tài)腳本支持框架之使用介紹篇前面兩篇博文,主要是整體介紹和如何使用接下來(lái)開(kāi)始進(jìn)入正題,逐步剖析,這個(gè)項(xiàng)目是怎么一步一步搭建起來(lái)的本篇博文則主要介紹基本骨架的設(shè)計(jì),圍繞項(xiàng)目 showImg(https://segmentfault.com/img/remote/1460000015739044); Quick-Task 動(dòng)態(tài)腳...

    Ashin 評(píng)論0 收藏0
  • 180719-Quick-Task 動(dòng)態(tài)腳本支持框架使用介紹篇

    摘要:文章鏈接動(dòng)態(tài)腳本支持框架之使用介紹篇?jiǎng)討B(tài)腳本支持框架之使用介紹篇相關(guān)博文動(dòng)態(tài)腳本支持框架整體介紹篇這個(gè)項(xiàng)目主要就是為了解決數(shù)據(jù)訂正和接口驗(yàn)證不方便的場(chǎng)景,設(shè)計(jì)的一個(gè)及其簡(jiǎn)單的動(dòng)態(tài)腳本調(diào)度框架,前面一篇整體介紹篇博文,主要介紹了這是 showImg(https://segmentfault.com/img/remote/1460000015698572); 文章鏈接:https://li...

    shiina 評(píng)論0 收藏0
  • 利用Groovy加載動(dòng)態(tài)實(shí)現(xiàn)文件解析

    摘要:措施將解析功能模塊化,獨(dú)立于業(yè)務(wù)流程利用的加載器,加載外部腳本該腳本放在數(shù)據(jù)庫(kù)中類(lèi)圖說(shuō)明功能觸發(fā)后目前為定時(shí)任務(wù)驅(qū)動(dòng),從配置表獲取需要解析的對(duì)象信息,根據(jù)配置選擇相應(yīng)的解析器實(shí)現(xiàn)類(lèi)接口實(shí)現(xiàn)解析文件的功能。 起因 項(xiàng)目上有用到文件解析的功能,一個(gè)txt對(duì)賬文件,逐行讀取數(shù)據(jù)并處理落庫(kù)。不同的渠道,其文件內(nèi)容、格式等差異可能較大,落庫(kù)及后續(xù)處理方式也或許不同。雖然目前使用了策略模式以求保持...

    siberiawolf 評(píng)論0 收藏0
  • Java動(dòng)態(tài)編程初探

    摘要:動(dòng)態(tài)編程使用場(chǎng)景通過(guò)配置生成代碼,減少重復(fù)編碼,降低維護(hù)成本。動(dòng)態(tài)生成字節(jié)碼操作字節(jié)碼的工具有,其中有兩個(gè)比較流行的,一個(gè)是,一個(gè)是。 作者簡(jiǎn)介 傳恒,一個(gè)喜歡攝影和旅游的軟件工程師,先后從事餓了么物流蜂鳥(niǎo)自配送和蜂鳥(niǎo)眾包的開(kāi)發(fā),現(xiàn)在轉(zhuǎn)戰(zhàn) Java,目前負(fù)責(zé)物流策略組分流相關(guān)業(yè)務(wù)的開(kāi)發(fā)。 什么是動(dòng)態(tài)編程 動(dòng)態(tài)編程是相對(duì)于靜態(tài)編程而言的,平時(shí)我們討論比較多的靜態(tài)編程語(yǔ)言例如Java, 與動(dòng)態(tài)...

    趙連江 評(píng)論0 收藏0
  • java開(kāi)發(fā)程序員需要用到的庫(kù)和框架有哪些

    摘要:框架是和應(yīng)用程序的另一個(gè)測(cè)試和規(guī)范框架。它是為應(yīng)用程序編寫(xiě)自動(dòng)測(cè)試的最有用的庫(kù)之一。數(shù)據(jù)庫(kù)是許多應(yīng)用程序包括核心和應(yīng)用程序不可分割的一部分,可能是進(jìn)行單元測(cè)試時(shí)的最大障礙。 作為一名Java開(kāi)發(fā)人員,我們從事不同的領(lǐng)域,從編寫(xiě)核心Java代碼到創(chuàng)建JSP頁(yè)面、編寫(xiě)RESTAPI,有時(shí)甚至創(chuàng)建Groovy腳本以實(shí)現(xiàn)構(gòu)建自動(dòng)化...

    zhaochunqi 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<