隨筆 - 175  文章 - 202  trackbacks - 0
          <2011年6月>
          2930311234
          567891011
          12131415161718
          19202122232425
          262728293012
          3456789

          第一個(gè)Blog,記錄哈哈的生活

          常用鏈接

          留言簿(16)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          Java links

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          目前項(xiàng)目有個(gè)需要,就是在所有查詢的參數(shù)中,增加一個(gè)屬性。
          自然想到使用 interceptor 將每個(gè) parameter wraper 一下,加上這個(gè)屬性
          我就使用 cglib 生成了一個(gè) wrapper class,然后再 proxy 到原來(lái)的 parameter 上。

          后來(lái),出了錯(cuò)誤,找了好長(zhǎng)時(shí)間,發(fā)現(xiàn)
          ibatis sql 中寫著 isPrimary,可其實(shí)在 java 里是這樣的

          private boolean isPrimary;
          public boolean isPrimary() {
              return isPrimary;
          }

          其實(shí)屬性名字是 primary 啊,為什么在 wrapper 之前就不出錯(cuò)呢。

          找了一下,ibatis 是通過(guò)他自己的 probe 來(lái)獲得屬性值的,這個(gè) probe 不僅會(huì)通過(guò)方法取值,還會(huì)通過(guò) field name 取值,沒(méi)訪問(wèn)權(quán)限的,還會(huì)加上權(quán)限。

          就是 ClassInfo 的下面方法


            private void addFields(Class clazz) {

              Field[] fields = clazz.getDeclaredFields();

              for (int i = 0; i < fields.length; i++) {

                Field field = fields[i];

                if (canAccessPrivateMethods()) {

                  try {

                    field.setAccessible(true);

                  } catch (Exception e) {

                    // Ignored. This is only a final precaution, nothing we can do.

                  }

                }

                if (field.isAccessible()) {

                  if (!setMethods.containsKey(field.getName())) {

                    addSetField(field);

                  }

                  if (!getMethods.containsKey(field.getName())) {

                    addGetField(field);

                  }

                }

              }

              if (clazz.getSuperclass() != null) {

                addFields(clazz.getSuperclass());

              }

            }


          解決辦法,將 isPrimary 改成 primary

          posted on 2011-06-01 15:58 哈哈的日子 閱讀(184) 評(píng)論(0)  編輯  收藏

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 乳源| 建始县| 石柱| 绩溪县| 东海县| 堆龙德庆县| 水城县| 广平县| 敦化市| 博兴县| 绥宁县| 尼木县| 阳朔县| 修文县| 莆田市| 文登市| 太谷县| 潍坊市| 涞水县| 丁青县| 福建省| 宁陕县| 诸城市| 勐海县| 仪征市| 肥乡县| 西林县| 枣强县| 泌阳县| 屏东市| 盐城市| 三门峡市| 壶关县| 射阳县| 洛阳市| 合川市| 甘孜| 桓仁| 手机| 和林格尔县| 宜章县|