国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

為你的應用程序添加動態Java代碼

2019-11-18 13:38:26
字體:
來源:轉載
供稿:網友

摘要
     你曾經希望你的java代碼能夠像jsp一樣是動態的嗎?它可以在運行時被修改和重新編譯,同時你的應用程序自動更新。本文闡述了如何讓你的代碼動態化。同樣的,你的一些源代碼將會被直接部署,而不是編譯好的字節碼。這些源代碼的任何改變都將引起這些源代碼的再編譯和類的重新裝載。然后你的應用程序就會運行在新的類上,用戶將立即看到這種改變。本文不僅講述了運行時源碼編輯和類裝載,而且還提出一個將動態代碼與其調用者分離的設計方案。調用者保存對動態代碼的一個靜態引用,而不管動態代碼運行時如何再次裝載,調用者總能訪問最新的類且不用更新引用。這樣,動態代碼改變對客戶是透明的。

JSP是一種比servlets更有彈性的技術,因為它可以響應運行時的動態改變。你可以想象一個普通的java類也有這種動態的能力嗎?假如你能修改服務的執行而不用重新部署和更新應用程序,將會是很有趣的。

文章說明了如何編寫動態的代碼。它討論運行時源碼編輯,類的再裝載,和讓動態類的修改對它的調用者透明的代理設計模式。

版權聲明:任何獲得Matrix授權的網站,轉載時請務必保留以下作者信息和鏈接
作者:Li Yang;Amydeng
原文:http://www.javaworld.com/javaworld/jw-06-2006/jw-0612-dynamic.Html
Matrix:http://www.matrix.org.cn/resource/article/44/44615_Java+Dynamic+Code.html
要害字:Java;動態代碼

一個動態java代碼的例子

     讓我們以一個動態java代碼的例子開始來闡釋真正的動態代碼意味著什么,為下文的討論做鋪墊。請在源碼中找到這個例子完整的源代碼。

    這個例子是一個簡單的依靠名叫Postman的服務的java應用程序。Postman服務是一個java接口,僅包括一個方法,
deliverMessage():
public interface Postman {
    void deliverMessage(String msg);
}


這項服務的簡單執行是向控制臺打印消息。執行類是動態的代碼。這個類,PostmanImpl,僅是一個普通的 java類,假如不是展開它的源碼代替它的已編譯好的二進制碼:
public class PostmanImpl implements Postman {

    PRivate PrintStream output;
    
    public PostmanImpl() {
        output = System.out;
    }
    
    public void deliverMessage(String msg) {
        output.println(" Postman  " + msg);
        output.flush();
    }
}


使用Postman服務的應用程序如下。在main()方法里,循環從控制行讀取消息并通過Postman服務進行傳遞:
public class PostmanApp {

    public static void main(String[] args) throws Exception {
        BufferedReader sysin = new BufferedReader(new InputStreamReader(System.in));

        // OBTain a Postman instance
        Postman postman = getPostman();

        while (true) {
            System.out.print("Enter a message: ");
            String msg = sysin.readLine();
            postman.deliverMessage(msg);
        }
    }

    private static Postman getPostman() {
        // Omit for now, will come back later
    }
}


執行這個應用程序,輸入一些信息,你將看到控制臺輸出如下(你可以下載該例子并自行運行):
DynaCode  Init class sample.PostmanImpl
Enter a message: hello world
Postman  hello world
Enter a message: what a nice day!
Postman  what a nice day!
Enter a message:

現在讓我們來看看動態的東西。 不要停止應用程序,讓我們修改PostmanImpl的源碼。新的執行程序將會把所有的信息輸出到一個文本文件,而不是控制臺。
// MODIFIED VERSION
public class PostmanImpl implements Postman {

    private PrintStream output;
    
    // Start of modification
    public PostmanImpl() throws IOException {
        output = new PrintStream(new FileOutputStream("msg.txt"));
    }
    // End of modification

    public void deliverMessage(String msg) {
        output.println(" Postman  " + msg);

        output.flush();
    }
}



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 砚山县| 白玉县| 桑植县| 资阳市| 凌云县| 洛浦县| 南靖县| 西平县| 南乐县| 鄂州市| 黄陵县| 宜阳县| 稻城县| 库尔勒市| 金沙县| 宽城| 师宗县| 克拉玛依市| 拜泉县| 和林格尔县| 香格里拉县| 都江堰市| 长泰县| 永登县| 平武县| 栾城县| 华坪县| 高唐县| 香港| 华安县| 新泰市| 平安县| 长乐市| 恩施市| 德兴市| 惠州市| 绥江县| 谷城县| 昆明市| 阿鲁科尔沁旗| 东宁县|