java - 使用 Spring 3.0 将字节转换为类型,而无需更改应用程序(即将转换方法存储在 DB 中)

标签 java spring groovy drools

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

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

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

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

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

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

最佳答案

对我来说,这听起来像是您想要 serialize Java 类到数据库。据我所知,这是完全可以的,尽管我自己从未这样做过。这是 tutorial 的链接,但您可以轻松地通过 Google 搜索了解更多信息。

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

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

如果您可以限制最终用户提供可序列化的策略类,那么序列化可能是一个可行的选择。请注意,尽管序列化有其自身的怪癖,但正确执行它需要比一般 Java 知识更深入的知识。乔什·布洛赫 (Josh Bloch) Effective Java 2nd Ed.整个第 11 章都致力于连载。执行外部各方提供的代码也可能会带来安全风险。

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

关于java - 使用 Spring 3.0 将字节转换为类型,而无需更改应用程序(即将转换方法存储在 DB 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2487091/

相关文章:

java - 什么是 Java 字符串池以及 "s"与新字符串 ("s"有何不同?

Java ClassNotFoundException html 错误

java - 如何将对象作为 URI 行中的查询参数传递?

java spring 在第一次请求时填充表单的值

java - Spring @Transaction 未启动事务

oracle - 将 "expected"Oracle 异常返回到 Java Groovy/Grails 的最佳方法

java - 将注释插入 Jackson 的 Retrofit 请求中

java - 在java中计算科学数字

Groovy - 是否可以将类作为参数传递?

java - 如何从 jar 文件中加载 groovy 脚本?