1

有没有办法将转换策略(用于转换一些字节)存储到数据库中,然后在运行时执行它。

如果要存储一个完整的 java 文件,则需要对其进行编译、存储类以及如何注入到已经运行的系统中。我不确定这怎么可能。

但是在 JVM 上使用某种动态语言会很好。我在这里看到了一个在 spring 上下文中执行 groovy 的示例 http://www.devx.com/tips/Tip/42789

但这本质上仍然是静态的,因为应用程序上下文包含对实现的引用并且不能被数据库更改。

这有点像让最终使用 DSL(领域特定语言)来存储和执行转换策略。最终用户将能够输入他们的自定义规则

也许使用上下文的 JavaConfig 是可能的。我现在正在探索选项,特别是 Spring 3.0。欢迎您提出任何方向的建议。

4

2 回答 2

1

对我来说,这听起来像是您想将Java 类序列化到数据库中。据我所知,这完全没问题,尽管我自己从未做过。这是教程的链接,但您可以轻松地在 Google 上搜索更多信息。

OTOH 三思而后行,为什么您实际上需要在数据库中存储完整的类实例?存储完全限定的类名,然后加载类并通过 Spring 实例化它(也可能来自配置的所需属性)还不够吗?

更新:好的,现在我更好地理解了你的情况。

如果您可以约束最终用户提供可序列化的策略类,则序列化可能是一个可行的选择。请注意,尽管序列化有其自身的怪癖,因此正确地执行它需要比一般 Java 知识更深的知识。Josh Bloch 在Effective Java 第 2 版中。将整个第 11 章专门用于序列化。执行外部各方提供的代码也可能带来安全风险。

另一个可能的选择是自己实现 DSL 的元素,然后让最终用户从你提供的元素中组合他们想要的东西。这会更安全、更健壮,因为您仍然可以控制进入数据库的内容和执行的内容。

于 2010-03-21T13:00:48.203 回答
0

如果您希望存储在数据库中的内容具有类似脚本的行为,请考虑类似http://mvel.codehaus.org/ - 很容易做到。

于 2010-03-21T23:11:57.873 回答