隨筆-348  評論-598  文章-0  trackbacks-0
          題目: IOC 后臺機制學習
          給定:
          配置文件 config.txt, 文件內容
          className = test.JavaBean1
          field = username
          value = ABC

          該文件中的三個值會隨時可能變化, 唯一不變的是 className 指定的都是一個 JavaBean(為了簡化, 我們假定里面已經有一個 username 屬性, 例如:

          class JavaBeanxxxx {
          ?? ?private String username;

          ?? ?public String getUsername() {
          ?? ??? ?return username;
          ?? ?}

          ?? ?public void setUsername(String uname) {
          ?? ??? ?this.username = uname;
          ?? ?}
          }

          要求: 寫一段代碼, 讀取配置文件 config.txt, 然后實現(xiàn)把 className 指定的 JavaBean 類加載(注意這個類名是可以修改的, 可配置的), 然后生成一個實例,
          并把配置文件中field字段指定的值作為這個實例的屬性名(這里是username)所對應的值設置為 ABC(字符串), 并且要讀出最后設置的值.

          初學Java,題目是老Bean出的,感謝老Bean對我的指導

          以下是答案:
          package?com.gcoresoft.ioc;

          import?java.io.*;
          import?java.lang.reflect.*;
          import?java.util.*;
          import?java.beans.*;

          public?class?IOCStudy?{
          ????
          ??

          ????private?Properties?prop=new?Properties();
          ??????//Load?the?properties?file
          ????
          public?void?loadPropFile(String?filename)
          ????
          {
          ????????
          try
          ????????
          {
          ????????????FileInputStream?fin
          =new?FileInputStream(filename);
          ????????????prop.load(fin);
          ????????????fin.close();
          ????????}
          catch(Exception?e){
          ????????????System.out.println(e.toString());
          ????????}

          ????}

          ????
          ????
          private?String?getValueByName(String?Name)
          ????
          {
          ????????
          return?prop.getProperty(Name);
          ????}

          ????
          ????
          public?static?void?main(String[]?args)
          ????
          {
          ????????IOCStudy?ioc
          =new?IOCStudy();
          ????????ioc.loadPropFile(
          "E:\\Work\\GetInIOC\\src\\com\\gcoresoft\\ioc\\Config.txt");
          ????????
          try
          ????????
          {
          ????????????Class?bean
          =Class.forName(ioc.getValueByName("className"));
          ????????????
          try?{
          ????????????????java.beans.BeanInfo?info
          =java.beans.Introspector.getBeanInfo(bean);
          ????????????????java.beans.PropertyDescriptor?pd[]
          =info.getPropertyDescriptors();
          ????????????????
          try?{
          ????????????????????Method?mSet
          =null,mRead=null;
          ????????????????????Object?obj
          =bean.newInstance();
          ????????????????????
          for(int?i=0;i<pd.length;i++)
          ????????????????????????
          if(pd[i].getName().equalsIgnoreCase(ioc.getValueByName("field")))
          ????????????????????????
          {
          ????????????????????????????mSet
          =pd[i].getWriteMethod();
          ????????????????????????????mRead
          =pd[i].getReadMethod();????????????????????????????
          ????????????????????????}

          ????????????????????
          try?{
          ????????????????????????mSet.invoke(obj,?ioc.getValueByName(
          "value"));
          ????????????????????????String?str
          =(String)mRead.invoke(obj,?null);
          ????????????????????????System.out.println(str);
          ????????????????????}
          ?catch?(IllegalArgumentException?e)?{
          ????????????????????????
          //?TODO?Auto-generated?catch?block
          ????????????????????????e.printStackTrace();
          ????????????????????}
          ?catch?(InvocationTargetException?e)?{
          ????????????????????????
          //?TODO?Auto-generated?catch?block
          ????????????????????????e.printStackTrace();
          ????????????????????}

          ????????????????}
          ?catch?(InstantiationException?e)?{
          ????????????????????
          //?TODO?Auto-generated?catch?block
          ????????????????????e.printStackTrace();
          ????????????????}
          ?catch?(IllegalAccessException?e)?{
          ????????????????????
          //?TODO?Auto-generated?catch?block
          ????????????????????e.printStackTrace();
          ????????????????}


          ????????????????
          ????????????}
          ?catch?(IntrospectionException?e)?{
          ????????????????
          //?TODO?Auto-generated?catch?block
          ????????????????e.printStackTrace();
          ????????????}

          ????????????
          ????????????
          ????????}
          catch(ClassNotFoundException?e){
          ????????????System.out.println(e.toString());
          ????????}

          ????????
          ????}

          ????
          }




          ---------------------------------------------------------
          專注移動開發(fā)

          Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
          posted on 2007-03-30 20:39 TiGERTiAN 閱讀(227) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 博湖县| 常熟市| 长治县| 米林县| 双牌县| 綦江县| 南华县| 上饶市| 垦利县| 额尔古纳市| 闸北区| 尚志市| 韩城市| 方城县| 林口县| 嵩明县| 东乡县| 沙田区| 镇平县| 五家渠市| 滕州市| 阜新| 浑源县| 南汇区| 龙门县| 玛多县| 马边| 平定县| 任丘市| 射阳县| 夏邑县| 随州市| 衡阳市| 德保县| 新野县| 静安区| 云龙县| 博爱县| 陵川县| 新竹市| 治县。|