隨筆-28  評論-51  文章-10  trackbacks-0

          網(wǎng)站:JavaEye 作者:fullfocus 發(fā)表時間: 2007-04-01 11:00 此文章來自于 http://www.JavaEye.com
          聲明:本文系JavaEye網(wǎng)站原創(chuàng)文章,未經(jīng)JavaEye網(wǎng)站或者作者本人書面許可,任何其他網(wǎng)站嚴(yán)禁擅自發(fā)表本文,否則必將追究法律責(zé)任!
          原文鏈接: http://fullfocus.javaeye.com/blog/67047

          今天研究Carrot2源代碼,查看其的整個數(shù)據(jù)流程,發(fā)現(xiàn)他把很多變動的東西用組件的形式來實現(xiàn),而通過腳本來跟應(yīng)用程序建立紐帶。這個腳本就是BeanShell,發(fā)現(xiàn)還挺好用,轉(zhuǎn)載一片不錯的文章。


           











          BeanShell快速入門---Java應(yīng)用程序腳本引擎










          http://www.daima.com.cn/Info/55/Info32134/




          快速入門


          歡迎使用BeanShell.這是一個速成課程。我們將省去一些重要的選項和細(xì)節(jié)。要學(xué)習(xí)更多的內(nèi)容請看本User's Guide的其它部分。


          下載和運行BeanShell


          請到http://www.beanshell.org下載最新的JAR文件。你可以用圖形桌面模式和命令行模式起動BeanShell。

          如果你只是要玩一玩BeanShell,你可以在BeanShell的jar文件上雙擊來起動BeanShell的桌面。但不管怎樣,如果你要讓BeanShell與你的類與應(yīng)用程序一起工作就必須將BeanShell的jar文件加到classpath中。

          你可以將BeanShell的jar文件拖到JAVA_HOME的ext目錄也可以直接加到classpath中。



          • windows用戶請將bsh.jar放在JAVA_HOME/jre/lib/ext文件夾,OSX用戶可以放在/Library/Java/Extensions.

            或者增加BeanShell到你的classpath目錄,如:

            unix: export CLASSPATH=$CLASSPATH:bsh-xx.jar

            windows:set classpath %classpath%;bsh-xx.jar




          然后你就可以運行BeanShell在GUI或命令行模式:



          •  java bsh.Console       // run the graphical desktop

            or

                 java bsh.Interpreter   // run as text-only on the command line

            or

                 java bsh.Interpreter filename [ args ] // run script file


          可以在你的應(yīng)用程序內(nèi)部來運行,也可以作為debug及servlet的遠(yuǎn)程服務(wù)器模式,或一個Applet內(nèi)部來運行BeanShell。請參考"BeanShell Modes of Operation"獲得更多詳情。


          BeanShell GUI


          用GUI模式啟動BeanShell后,將打開一個桌面視窗。用鼠標(biāo)右擊在桌面的背景上,你可以打開另一個控制臺視窗及其它的工具如一個簡單的類游覽器。

          每一個控制臺視窗運行一個獨立的BeanShell解釋器。這個圖形化的控制臺支持基本的歷史命令,行編輯,剪切和粘貼,甚至類和變量名的自動完成功能。從控制臺你能開啟一個簡單的編輯視窗。在它里面,你可以編寫腳本和使用‘eval’選項求表達(dá)式的值。


          Java語句和表達(dá)式


          BeanShell能理解標(biāo)準(zhǔn)的JAVA語句,表達(dá)式,和方法宣告。語句和表達(dá)式的內(nèi)容可以是:變量,宣告,賦值,方法調(diào)用,循環(huán),條件等。

          在Java程序中你必須嚴(yán)格的使用它們,但在BeanShell中,你可以用“寬松類型”(loosely typed)的方式來使用它們。也就是說,你可以在寫腳本時偷懶,不進行變量類型的宣告(在原始數(shù)據(jù)類型和對象都可以)。如果你試著用錯變量類型,BeanShell將會給出一個錯誤。

          這里有一些例子:



          • foo = "Foo";   

            four = (2 + 2)*2/2;

            print( foo + " = " + four );  // print() is a BeanShell command

            // Do a loop

            for (i=0; i<5; i++)

                print(i);  

            // Pop up a frame with a button in it

            button = new JButton( "My Button" );

            frame = new JFrame( "My Frame" );

            frame.getContentPane().add( button, "Center" );

            frame.pack();

            frame.setVisible(true);


          有用的BeanShell命令


          在剛才那個例子中我們用了一個內(nèi)建在BeanShell中的一個方便的命令print(),來顯示變量的值。print()跟ava的System.out.println()非常的相像,除非它能保證輸出總是命令行。print()也可以顯示一些對象的類型(如數(shù)組),但比Java的更詳細(xì)。另一個相關(guān)的命令是show(),用來開啟與關(guān)閉顯示你輸入的每一行的結(jié)果。

          這兒是一些其它的BeanShell的命令:

          source(), run() - 將一個bsh腳本讀到解釋器或運行在另一個解釋器。

          frame() - 顯示一個Frame或JFrame的GUI組件.

          load(), save() - 載入和保存一個序列化的對象到一個文件.

          cd(), cat(), dir(), pwd(), etc. - 類unix的shell命令。

          exec() - 運行一個本地的程序。

          javap() - 打印一個對象的方法和字段,類似于Java的javap命令。

          setAccessibility() - 開啟無限制的存取private 和protected的組件。

          要獲得更多的信息請查看BeanShell命令的詳細(xì)清單。


          提示:

          BeanShell命令并不是真的"內(nèi)建"其中的,而是作為腳本方法自動從classpath載入的. 你可以擴展基本命令集并加到classpath中作為自訂義的腳本來使用。


          腳本方法


          你可以在bsh中宣告和使用方法,就像在java的類中一樣。



          • int addTwoNumbers( int a, int b ) {

                return a + b;

            }

            sum = addTwoNumbers( 5, 7 );  // 12


          bsh的方法可以有動態(tài)的(寬松的)參數(shù)和返回類型。



          • add( a, b ) {

                return a + b;

            }

            foo = add(1, 2);            // 3

            foo = add("Oh", " baby");   // "Oh baby"


          實現(xiàn)Interface


          注意:如果要BeanShell能實現(xiàn)任意的Interface,必須有jdk1.3及以上支持。

          你可以在腳本中用標(biāo)準(zhǔn)的Java內(nèi)部類的語法來實現(xiàn)Interface.例如:



          • ActionListener scriptedListener = new ActionListener() {

                actionPerformed( event ) { ... }

            }


          你可以不用實現(xiàn)Interface的所有方法,而只用實現(xiàn)你需要的方法。如果代碼中調(diào)用了未被實現(xiàn)的方法,將丟出異常。如果你想重載大量的方法的行為--例如為日志生成一個"啞"適配器--你可以在腳本對象中實現(xiàn)一個特殊的方法:invoke(name,args)。invoke()方法用來處理任何未被定義的方法的調(diào)用:



          • ml = new MouseListener() {

                mousePressed( event ) { ... }

                // handle the rest

                invoke( name, args ) { print("Method: "+name+" invoked!");

            }


          腳本對象


          在BeanShell中,和在JavaScript與Perl中一樣,腳本對象是用封閉的方法體一構(gòu)成的。通過在方法未尾返回一個特殊值"this",你就可以像使用方法一樣調(diào)用這個對象了。在這個方法調(diào)用時,你可以給與它任何的值。通常對象內(nèi)部需要包括方法,所以BeanShell的腳本方法在一定程度上可再包含一些方法以構(gòu)成腳本對象。例如:



          • foo() {

                print("foo");

                x=5;

                bar() {

                    print("bar");

                }

                return this;

            }

            myfoo = foo();    // prints "foo"

            print( myfoo.x ); // prints "5"

            myfoo.bar();      // prints "bar"


          如果這些代碼對你來說很陌生,別急,請用戶手冊可得到更透徹的解釋。


          在你的腳本中,BeanShell腳本對象(也就是先前例子中的"this"參照)能自動實現(xiàn)任何JAVA介面類型。當(dāng)JAVA代碼調(diào)用相應(yīng)與之通訊的腳本方法內(nèi)的方法。當(dāng)你試著將腳本對象作為參數(shù)傳給Java方法時,BeanShell會自動將它造型(cast)為相應(yīng)的類型。如要傳遞BeanShell外部的對象時,你可以在需要時顯式的進行造型(cast).請看用戶手冊中的詳細(xì)內(nèi)容。


          從你的應(yīng)用程序調(diào)用BeanShell


          通過建立一個BeanShell解釋器,使用eval()或source()命令,你可以在你的應(yīng)用程序中求文本表達(dá)式的值和運行腳本。如果你希望在你的腳本內(nèi)部使用一個對象,可以用set()方法傳遞對象的變量參照給BeanShell,并通過get()方法取得結(jié)果。



          • import bsh.Interpreter;

            Interpreter i = new Interpreter();  // Construct an interpreter

            i.set("foo", 5);                    // Set variables

            i.set("date", new Date() );

            Date date = (Date)i.get("date");    // retrieve a variable

            // Eval a statement and get the result

            i.eval("bar = foo*10");            

            System.out.println( i.get("bar") );

            // Source an external script file

            i.source("somefile.bsh");






          《 (轉(zhuǎn))BeanShell快速入門---Java應(yīng)用程序腳本引擎 》 的評論也很精彩,歡迎您也添加評論。查看詳細(xì) >>





          JavaEye推薦
          上海樂福狗信息技術(shù)有限公司:誠聘技術(shù)經(jīng)理和開發(fā)工程師
          免費下載IBM社區(qū)版軟件--它基于開放的標(biāo)準(zhǔn),支持廣泛的開發(fā)類型,讓您的開發(fā)高效自主!
          京滬穗蓉四地免費注冊,SOA技術(shù)高手匯聚交鋒.
          上海:優(yōu)秀公司德比:高薪誠聘 資深Java工程師
          廣州:優(yōu)易公司:誠聘Java工程師,開發(fā)經(jīng)理
          上海:尤恩斯國際集團:誠聘開發(fā)工程師
          北京:優(yōu)秀公司NHNChina招聘:WEB開發(fā),系統(tǒng)管理,JAVA開發(fā), DBA



          文章來源: http://fullfocus.javaeye.com/blog/67047
          posted on 2007-04-01 11:00 fullfocus 閱讀(346) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 屏东县| 新宾| 塘沽区| 察哈| 黄浦区| 怀集县| 同心县| 清原| 宾阳县| 安陆市| 耒阳市| 房山区| 杭锦旗| 博湖县| 来安县| 游戏| 胶南市| 偏关县| 商城县| 岫岩| 辽源市| 信宜市| 宜宾市| 新巴尔虎左旗| 彭水| 崇明县| 扎兰屯市| 象州县| 邛崃市| 永善县| 建水县| 德格县| 恩平市| 武平县| 天长市| 航空| 九寨沟县| 高安市| 佛学| 高陵县| 苍山县|