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

第一个Blog,记录哈哈的生活

常用链接

留言簿(16)

随笔分类

随笔档案

文章分类

文章档案

收藏夹

Java links

搜索

  •  

最新评论

阅读排行榜

评论排行榜

目前项目有个需要,就是在所有查询的参数中,增加一个属性。
自然想到使用 interceptor 将每个 parameter wraper 一下,加上这个属性
我就使用 cglib 生成了一个 wrapper class,然后再 proxy 到原来的 parameter 上。

后来,出了错误,找了好长时间,发现
ibatis sql 中写着 isPrimary,可其实在 java 里是这样的

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

其实属性名字是 primary 啊,为什么在 wrapper 之前就不出错呢。

找了一下,ibatis 是通过他自己的 probe 来获得属性值的,这个 probe 不仅会通过方法取值,还会通过 field name 取值,没访问权限的,还会加上权限。

就是 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 哈哈的日子 阅读(170) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: