<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 78,  comments - 48,  trackbacks - 0
    ??1 public ? class ?DrpToOAInfo? {
    ??2 ?@PersistenceContext
    ??3 ?EntityManager?entityManager;
    ??4 ?
    ??5 ? private ? final ? static ?String?CONFIGURETION_FILE? = ? " send_message_zh.properties " ;
    ??6 ? private ? static ?Properties?properties? = ? null ;
    ??7 ?
    ??8 ? public ? static ?Properties?readConfiguretion()
    ??9 ? {
    ?10 ?? if ?(properties? == ? null )
    ?11 ?? {
    ?12 ??? try
    ?13 ??? {
    ?14 ????properties? = ? new ?Properties();
    ?15 ????ClassLoader?cl? = ?Thread.currentThread().getContextClassLoader();
    ?16 ????InputStream?inputStream? = ? null ;
    ?17 ???? if ?(cl? != ? null )
    ?18 ???? {
    ?19 ?????inputStream? = ?cl.getResourceAsStream(CONFIGURETION_FILE);
    ?20 ????}
    ?21 ???? if ?(inputStream? != ? null )
    ?22 ???? {
    ?23 ?????properties.load(inputStream);
    ?24 ?????inputStream.close();
    ?25 ????}
    ?26 ???}
    ?27 ??? catch ?(Exception?e)
    ?28 ??? {
    ?29 ????e.printStackTrace();
    ?30 ???}
    ?31 ??}
    ?32 ?? return ?properties;
    ?33 ?}
    ?34 ?
    ?35 ?
    ?36 ? /**?*/ /**
    ?37 ??*?
    ?38 ??*? @param ?type??接收者類型
    ?39 ??*? @param ?id????接收者id
    ?40 ??*? @param ?name??接收者名稱
    ?41 ??*? @param ?contentVariable??內(nèi)容中的變動(dòng)部分
    ?42 ??*? @param ?url?IP地址、端口號(hào)、項(xiàng)目
    ?43 ??*? @param ?value?生產(chǎn)計(jì)劃單號(hào)
    ?44 ??*? @param ?configureInformType?通知類型
    ?45 ?? */
    ?46 ? public ? static ? void ?sendMessage( int ?type,?
    ?47 ???????????????????String?id,?
    ?48 ???????????????????String?name,?
    ?49 ???????????????????Object[]?contentVariable,?
    ?50 ???????????????????String?url,
    ?51 ???????????????????Object[]?value,
    ?52 ???????????????????String?configureInformType)
    ?53 ? {
    ?54 ??String?applictionName? = ? "" ;
    ?55 ??String?content? = ? "" ;
    ?56 ??String?URL? = ? "" ;
    ?57 ??ReceiveType?rt? = ?ReceiveType.DEPARTMENT;
    ?58 ??
    ?59 ?? // 讀取資源文件
    ?60 ??Properties?properties? = ?readConfiguretion();
    ?61 ??applictionName? = ?properties.getProperty( " system.module.appliction.name " );
    ?62 ??content? = ?MessageFormat.format(properties.getProperty(configureInformType),?contentVariable);
    ?63
    ?64 ??URL? = ?url? + ?MessageFormat.format(properties.getProperty(configureInformType? + ? " .url " ),?value);;
    ?65 ??
    ?66 ??
    ?67 ?? if (type? == ? 0 )
    ?68 ?? {
    ?69 ???rt? = ?ReceiveType.PEOPLE;
    ?70 ??}
    ?71 ?? if (type? == ? 1 )
    ?72 ?? {
    ?73 ???rt? = ?ReceiveType.DEPARTMENT;
    ?74 ??}
    ?75 ?? if (type? == ? 2 )
    ?76 ?? {
    ?77 ???rt? = ?ReceiveType.ROLE;
    ?78 ??}
    ?79
    ?80 ??System.out.println( " ****************************************** " );
    ?81 ??System.out.println( " *?類型: " + rt);
    ?82 ??System.out.println( " *?ID: " + id);
    ?83 ??System.out.println( " *?接收者名稱: " + name);
    ?84 ??System.out.println( " *?內(nèi)容: " + content);
    ?85 ??System.out.println( " *?url: " + URL);
    ?86 ??System.out.println( " ****************************************** " );
    ?87 ????????StartupMessage?sm? = ? new ?StartupMessage(applictionName,?rt, " 117 " ,? " tonywu " ,?id,?name,?content,?URL);
    ?88
    ?89 ??SendMessage?s? = ? new ?SendMessage();?
    ?90 ??s.sendMessage(sm);
    ?91 ?}
    ?92 ?
    ?93 ? /**?*/ /**
    ?94 ??*?從request中得到地址中的參數(shù),
    ?95 ??*? @param ?taskID??接收者類型
    ?96 ??*? @param ?processorID????處理者ID
    ?97 ??*? @param ?processorName??處理者名稱
    ?98 ??*? @param ?processorTime??處理時(shí)間
    ?99 ?? */
    100 ? public ? static ? void ?overMessage(String[]?processorInfo)
    101 ? {
    102 // ??讀取資源文件
    103 ??Properties?properties? = ?readConfiguretion();
    104 ??String?applictionName? = ?properties.getProperty( " system.module.appliction.name " );
    105 // ??Calendar?date?=?Calendar.getInstance();
    106 // ??String?t?=?date.get(Calendar.YEAR)+"-"+date.get(Calendar.MONTH)+"-"+date.get(Calendar.DATE);
    107 ??BeOverMessage?bm? = ? new ?BeOverMessage(applictionName,?processorInfo[ 1 ],
    108 ?????????????????????????????????? " 117 " ,? " tonywu " , new ?Date());
    109
    110 ??System.out.println( " ****************************************** " );
    111 ??System.out.println( " *?taskID類型: " + processorInfo[ 1 ]);
    112 ??System.out.println( " *?processorIDID: " + processorInfo[ 2 ]);
    113 ??System.out.println( " *?processorName接收者名稱: " + processorInfo[ 3 ]);
    114 ??System.out.println( " *?時(shí)間: " + new ?Date());
    115 ??System.out.println( " ****************************************** " );
    116
    117 ??SendMessage?s? = ? new ?SendMessage();?
    118 ??s.sendMessage(bm);
    119 ?}
    120 }
    121


    幾乎所有的系統(tǒng)都需要通過(guò)獲取配置/資源文件來(lái)方便配置系統(tǒng)
    但怎樣獲取資源文件呢
    java的應(yīng)用通常把配置文件和工程中的其他class放在一起(如log4j),原因是可以方便的使用classLoader的 getResourceAsStream()方法獲取資源(其實(shí)java內(nèi)部就是這樣來(lái)
    load class的),下面是一個(gè)簡(jiǎn)單例子:
    比如你把文件(abc.properties)放到com.yourcompany.common包里面,在確保classpath包括該包的情況
    下就可以按下面的方法獲取資源
    ClassLoader cl = this.getClass().getClassLoader();
    InputStream is = cl.getResourceAsStream("com/yourcompany/"+abc.properties)
    進(jìn)一不,如果abc.properties是一個(gè)標(biāo)準(zhǔn)的properties文件的話,比如其內(nèi)容如下
    messageA = Ok!
    還可以這樣獲取配置信息
    Properties props = new Properties();
    props.load(is);
    String messageA = props.getProperty("messageA ");
    則messageA== "Ok"
    當(dāng)然properties也可以是XML格式,只要他符合http://java.sun.com/dtd/properties.dtd的規(guī)范并且包含
    <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">的DOCTYPE declaration,就可以用props.loadFromXML(InputSteam in)方法載入property
    ps:property 也提供store()和storeToXML方法保存屬性
    關(guān)于classLoader也可以看看?

    classloader相關(guān)基礎(chǔ)知識(shí)
      JVM
      jvm是jre里頭一個(gè)動(dòng)態(tài)連接函數(shù)庫(kù),jdk里面的jre一般用于運(yùn)行java本身的程序,比如javac,等等.programfiles下面的jre用于運(yùn)行用戶編寫的java程序.
      JRE下的bin\client 或者 bin\server 的jvm.dll就是JVM了

      當(dāng)一臺(tái)機(jī)器上有多個(gè)jvm可選擇的時(shí)候,jvm的選擇步驟:
      1)當(dāng)前目錄有沒(méi)有jre目錄(不準(zhǔn)確),
      2)父目錄下的jre子目錄
      3)注冊(cè)表HEKY_LOCAL_MACHINE\SoftWare\Java\Java Runtime Environment\
      所以當(dāng)運(yùn)行的是jdk\bin\java.exe的時(shí)候,用的jre是bin的父目錄jdk下面的jre\
      運(yùn)行java.exe找到了jre后有一個(gè)驗(yàn)證程序,驗(yàn)證jre和java.exe的版本是否一致,如果不一致則會(huì)發(fā)生錯(cuò)誤


      java -verbose:class Main 顯示調(diào)用的詳細(xì)信息


      classloader的兩種載入方式:1)pre-loading預(yù)先載入,載入基礎(chǔ)類 2)load-on-demand按需求載入
      只有實(shí)例化一個(gè)類才會(huì)被classloader載入,僅僅申明并不會(huì)載入


      java動(dòng)態(tài)載入class的兩種方式:
      1)implicit隱式,即利用實(shí)例化才載入的特性來(lái)動(dòng)態(tài)載入class
      2)explicit顯式方式,又分兩種方式:
      1)java.lang.Class的forName()方法
      2)java.lang.ClassLoader的loadClass()方法


      static塊在什么時(shí)候執(zhí)行?
      1)當(dāng)調(diào)用forName(String)載入class時(shí)執(zhí)行,如果調(diào)用ClassLoader.loadClass并不會(huì)執(zhí)行.forName(String,false,ClassLoader)時(shí)也不會(huì)執(zhí)行.
      2)如果載入Class時(shí)沒(méi)有執(zhí)行static塊則在第一次實(shí)例化時(shí)執(zhí)行.比如new ,Class.newInstance()操作
      3)static塊僅執(zhí)行一次



      Class類的實(shí)例.
      >>Class類無(wú)法手工實(shí)例化,當(dāng)載入任意類的時(shí)候自動(dòng)創(chuàng)建一個(gè)該類對(duì)應(yīng)的Class的實(shí)例,
      >>某個(gè)類的所有實(shí)例內(nèi)部都有一個(gè)欄位記錄著該類對(duì)應(yīng)的Class的實(shí)例的位置.,
      >>每個(gè)java類對(duì)應(yīng)的Class實(shí)例可以當(dāng)作是類在內(nèi)存中的代理人.所以當(dāng)要獲得類的信息(如有哪些類變量,有哪些方法)時(shí),都可以讓類對(duì)應(yīng)的Class的實(shí)例代勞.java的Reflection機(jī)制就大量的使用這種方法來(lái)實(shí)現(xiàn)
      >>每個(gè)java類都是由某個(gè)classLoader(ClassLoader的實(shí)例)來(lái)載入的,因此Class類別的實(shí)例中都會(huì)有欄位記錄他的ClassLoader的實(shí)例,如果該欄位為null,則表示該類別是由bootstrap loader載入的(也稱root laoder),bootstrap loader不是java所寫成,所以沒(méi)有實(shí)例.

      原生方法:forName0()等方法,native修飾符


      自定義ClassLoader:
      如實(shí)例化一個(gè)URLClassLoader. URLClassLoader ucl = new URLClassLoader(new URL[]{new URL("file:/e:/bin/")}),URLClassLoader優(yōu)先找當(dāng)前目錄,再在url中找.class加載.URL中別忘在最后加"/"表示目錄


      各個(gè)java類由哪些classLoader加載?
      1)java類可以通過(guò)實(shí)例.getClass.getClassLoader()得知
      2)接口由AppClassLoader(System ClassLoader,可以由ClassLoader.getSystemClassLoader()獲得實(shí)例)載入
      3)ClassLoader類由bootstrap loader載入


      ClassLoader hierachy:
      jvm建立->初始化動(dòng)作->產(chǎn)生第一個(gè)ClassLoader,即bootstrap loader->bootstrap loader在sum.misc.Launcher類里面的ExtClassLoader,并設(shè)定其Parent為null->bootstrap loader載入sun.misc.Launcher$AppClassLoader,并設(shè)定其parent為ExtClassLoader(但是AppClassLoader也是由bootstrap loader所載入的)->AppClassLoader載入各個(gè)xx.class,xx.class也有可能被ExtclassLoader或者bootstrap loader載入.
      >>自定義的ClassLoader的.getParent()是AppClassLoader.parent和他的加載器并沒(méi)有關(guān)系
      >>ExtClassLoader和AppClassLoader都是URLClassLoader的子類.AppClassLoader的URL是由系統(tǒng)參數(shù)java.class.path取出的字符串決定,而java.class.path由 運(yùn)行java.exe時(shí) 的-cp或-classpath或CLASSPATH環(huán)境變量決定
      >>ExtClassLoader查找的url是系統(tǒng)變量java.ext.dirs,java.ext.dirs默認(rèn)為jdk\jre\lib\ext
      >>Bootstrap loader的查找url是sun.boot.class.path
      >>在程序運(yùn)行后調(diào)用System.setProperty()來(lái)改變系統(tǒng)變量并不能改變以上加載的路徑,因?yàn)閏lassloader讀取在System.setProperty之前.sun.boot.class.path是在程序中寫死的,完全不能修改

      委派模型
      當(dāng)classloader有類需要載入時(shí)先讓其parent搜尋其搜尋路徑幫忙載入,如果parent找不到,在由自己搜尋自己的搜尋路徑載入,ClassLoader hierachy本來(lái)就有這種性質(zhì)



      NoClassDefFoundError和ClassNotFoundException
      NoClassDefFoundError:當(dāng)java源文件已編譯成.class文件,但是ClassLoader在運(yùn)行期間在其搜尋路徑load某個(gè)類時(shí),沒(méi)有找到.class文件則報(bào)這個(gè)錯(cuò)
      ClassNotFoundException:試圖通過(guò)一個(gè)String變量來(lái)創(chuàng)建一個(gè)Class類時(shí)不成功則拋出這個(gè)異常
    posted on 2006-12-08 17:25 黑咖啡 閱讀(4122) 評(píng)論(1)  編輯  收藏 所屬分類: Tec Article

    FeedBack:
    # re: 【摘】java中讀取資源文件
    2008-09-02 11:30 | Yvon
    在找相關(guān)資料,謝謝博主的分享  回復(fù)  更多評(píng)論
      

    <2006年12月>
    262728293012
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    留言簿(2)

    隨筆分類(67)

    文章分類(43)

    Good Article

    Good Blogs

    Open Source

    最新隨筆

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲国产精品不卡在线电影| 中文字幕成人免费高清在线| 亚洲精品~无码抽插| 手机看片久久国产免费| 免费人成在线观看69式小视频| 一出一进一爽一粗一大视频免费的| 亚洲人成网站看在线播放| 久久久久亚洲AV无码专区首| 亚洲欧洲一区二区三区| 又粗又大又长又爽免费视频| 青青草免费在线视频| 最近中文字幕高清免费中文字幕mv| 成年免费a级毛片免费看无码| 亚洲精品中文字幕| ASS亚洲熟妇毛茸茸PICS| 亚洲精品永久www忘忧草| 亚洲av无码乱码国产精品fc2| 国产午夜亚洲精品国产成人小说| 国产一级淫片a免费播放口之| 最近中文字幕mv免费高清视频7| 99蜜桃在线观看免费视频网站| 国产羞羞的视频在线观看免费| 一个人免费观看www视频| 黄色免费网址在线观看| 亚洲av无码一区二区三区在线播放| 亚洲精品人成网在线播放影院| 亚洲不卡视频在线观看| 亚洲系列中文字幕| 亚洲视频一区二区三区| 亚洲最大成人网色| 亚洲精品高清国产麻豆专区| 亚洲国产高清美女在线观看| 久久久亚洲裙底偷窥综合| 中文字幕亚洲色图| 亚洲国产成人九九综合| 亚洲人成人77777在线播放| 亚洲第一区二区快射影院| 亚洲精品成a人在线观看☆| 激情小说亚洲图片| 三年片在线观看免费观看大全中国| 日韩免费在线中文字幕|