191217-Ognl之内部类与静态成员属性修改使用姿势

文章目录
  1. 1. 内部类使用
  2. 2. 静态成员修改
  • II. 其他
    1. 1. 一灰灰Blog: https://liuyueyi.github.io/hexblog
    2. 2. 声明
    3. 3. 扫描关注
  • 191204-Ognl 使用实例手册 中,当时遇到一个问题,静态成员属性直接赋值时,会抛出异常;那么这个问题真的无解么?

    此外之前的实例手册中,漏了一个内部类的使用姿势,本文也一并补上

    1. 内部类使用

    我们这里指定的内部类通常是静态内部类,但是直接像一般的静态类的调用方式会发现找不到类,这个时候需要借助$,如下

    1
    2
    # 注意外部类与内部类之间使用$进行分割
    @git.hui.fix.test.ognl.OgnlTest$InnerClz@age

    一个简单的测试case

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    package git.hui.fix.test.ognl;
    public class OgnlTest {
    public static class InnerClz {
    public static Integer age = 10;
    }

    @Test
    public void test() {
    // 构建一个OgnlContext对象
    OgnlContext context = (OgnlContext) Ognl.createDefaultContext(this,
    new DefaultMemberAccess(true),
    new DefaultClassResolver(),
    new DefaultTypeConverter());
    // 静态类成员修改
    ans = Ognl.getValue(Ognl.parseExpression("@git.hui.fix.test.ognl.OgnlTest$InnerClz@age"), context,
    context.getRoot());
    System.out.println("静态成员: " + ans);
    }
    }

    2. 静态成员修改

    直接使用静态赋值,会抛异常,那么静态成员可以怎么修改呢?

    走曲线救国套路,利用反射的方式来处理,比如下面的case

    1
    2
    # 通过反射的方式修改静态成员
    @git.hui.fix.test.ognl.OgnlTest$InnerClz@class.getField("age").set(null, 30)

    II. 其他

    1. 一灰灰Bloghttps://liuyueyi.github.io/hexblog

    一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

    2. 声明

    尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

    3. 扫描关注

    一灰灰blog

    QrCode

    # OGNL

    评论

    Your browser is out-of-date!

    Update your browser to view this website correctly. Update my browser now

    ×