浪跡天涯
          web報表設計器....
          posts - 61,comments - 71,trackbacks - 0

          第一步:定義服務的配置文件(指定服務名和服務路徑)

          <? xml?version = " 1.0 " ?encoding = " gb2312 " ?>
          <!-- DOCTYPE?service - config?SYSTEM? " service.dtd " -->
          < service - config >
          ????
          <!-- ?用戶服務? -->
          ????
          < service?name = " UserService " ? class = " com.xainfor.service.UserService " ?template = " normal " ? />
          ????
          < service?name = " GnmkService " ? class = " com.xainfor.service.GnmkService " ?template = " normal " ? />
          </ service - config > ?

          第二步:系統初始化是將所有服務名和路徑加載到一個靜態的HashMap中

          public ? class ?ServiceConfig? {
          ????
          ????
          public ? static ?HashMap?serviceMap? = ? new ?HashMap();
          ????
          ????
          public ? static ?String?getService(String?serviceName)? {
          ????????String?serviceClass?
          = ? "" ;
          ????????serviceClass?
          = ?ServiceConfig.serviceMap.get(serviceName).toString();
          ????????
          return ?serviceClass;
          ????}

          }


          第三步:定義一個接口類

          public ? interface ?Service? {
          ?
          public ? void ?execute();
          }
          第四步:服務實例化類
          public?class?ServiceExecuteHelper?{
          ????
          ????
          /**
          ?????*?日志處理
          ?????
          */

          ????
          private?static?final?MsgLogger?logger?=?MsgLogger.getLogger();
          ????
          ?????
          public?static?void execute(String?servicename)?{
          ?????????
          try?{
          ????????????
          //驗證服務是否存在
          ????????????String?servicClass?=?ServiceConfig.getService(servicename);
          ????????????
          //如果服務存在就加載服務信息
          ????????????if?(servicClass?!=?null?&&?!servicClass.equals(""))?{
          ????????????????Class?classObject?
          =?Class.forName(servicClass);
          ????????????????Service?service?
          =?(Service)?classObject.newInstance();
          ????????????????
          service.execute();????????????????????????????
          ????????????}
          ?else?{
          ????????????????logger.info(
          "服務["+servicename+"]未定義");
          ????????????}

          ????????}
          ?catch(Exception?e)?{
          ????????????logger.info(
          "服務["+servicename+"]不存在!");
          ????????}

          ?????}

          }
          第五步:定義接具體服務并實現接口類
          public?class?GnmkService?implements?Service?{

          ????
          /*?(non-Javadoc)
          ?????*?@see?com.xainfor.service.Service#println()
          ?????
          */

          ????
          public?void execute()?{
          ????????
          //?TODO?Auto-generated?method?stub
          ????????System.out.println(
          "執行的是GnmkService");
          ????}


          }
          public?class?UserService?implements?Service?{
          ????
          ????
          public?void execute()?{
          ????????
          //?TODO?Auto-generated?method?stub
          ????????System.out.println("執行的是UserService");
          ????????
          ????}

          }
          第六步:測試類
          public?class?testService?{
          ???
          ????
          public?static?void?main(String?[]?temp)?{
          ??????ServiceExecuteHelper.execute("UserService");
          ???}

          }
          posted on 2007-11-19 15:48 JJCEA 閱讀(4203) 評論(16)  編輯  收藏 所屬分類: java日記

          FeedBack:
          # re: java通過服務名動態實例化對象并調用指定方法
          2007-11-20 08:45 | 隔葉黃鶯
          IOC組件像Spring不就是很好的幫助你完成這些事情的嗎  回復  更多評論
            
          # re: java通過服務名動態實例化對象并調用指定方法
          2007-11-20 09:30 | 我的java生涯
          我是在做一個統一消息認證平臺,不想太多的用第三方的東西.  回復  更多評論
            
          # re: java通過服務名動態實例化對象并調用指定方法
          2007-11-20 15:22 | feilong
          請問服務的配置文件是自己解析嗎?  回復  更多評論
            
          # re: java通過服務名動態實例化對象并調用指定方法
          2007-11-20 16:40 | 隔葉黃鶯
          統一消息認證用Ldap,一般應用服務器只需配置就行了,都不需要編碼實現  回復  更多評論
            
          # re: java通過服務名動態實例化對象并調用指定方法
          2007-11-20 17:59 | 我的java生涯
          服務的配置文件是自己解析@feilong
          是自已解析的,代碼如下:
          public class ReadService {

          public String readService(String value) {
          String fileName = "/service.xml";
          String classname = "";
          try {
          ReadXML readXmlBean = new ReadXML();
          String file = java.net.URLDecoder.decode(this.getClass().getResource(fileName).toString(), "UTF-8");
          file = file.substring(file.indexOf(":") + 1, file.length());
          readXmlBean.readXML(file);//讀取指定路徑的XML文件
          Document doc = readXmlBean.getXmlDoc();
          Element root = doc.getRootElement();
          java.util.List lsTable = root.getChildren();//得到根節點下的所有子節點
          for (Iterator iterTable = lsTable.iterator(); iterTable.hasNext(); ) {
          Element elTable = (Element) iterTable.next();
          if (value.equals(elTable.getAttributeValue("name"))){
          classname = elTable.getAttributeValue("class");
          break;
          }
          }
          }
          catch (Exception ex) {
          ex.printStackTrace();
          }
          return classname;
          }  回復  更多評論
            
          # re: java通過服務名動態實例化對象并調用指定方法
          2007-11-20 18:01 | 我的java生涯
          我們這個主要是消息發送的接收,附件發送,接收,包括權限等數據的傳送  回復  更多評論
            
          # re: java通過服務名動態實例化對象并調用指定方法
          2008-01-03 13:42 | CGF
          # re: java通過服務名動態實例化對象并調用指定方法
          2008-01-03 13:42 | CGF
          # re: java通過服務名動態實例化對象并調用指定方法
          # re: java通過服務名動態實例化對象并調用指定方法
          主站蜘蛛池模板: 岳阳县| 灵璧县| 稷山县| 会同县| 凯里市| 南昌市| 巴南区| 清远市| 苏尼特右旗| 新乐市| 梁山县| 蕉岭县| 嘉兴市| 三亚市| 哈密市| 通化县| 福安市| 凉城县| 武山县| 六枝特区| 广饶县| 新民市| 固阳县| 贺兰县| 舞阳县| 讷河市| 荥经县| 郁南县| 靖安县| 鸡西市| 荔浦县| 阿拉善盟| 祁阳县| 丰原市| 韶山市| 西乡县| 莆田市| 新津县| 会东县| 梁河县| 江北区|