代码之家  ›  专栏  ›  技术社区  ›  Daniel Spiewak

使用Spring3.0将字节转换为类型而不更改应用程序(即将转换方法存储在数据库中)

  •  1
  • Daniel Spiewak  · 技术社区  · 5 年前

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

    如果要存储完整的Java文件,则需要编译它,存储类,以及如何注入已运行的系统。我不知道这怎么可能。

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

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

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

    也许使用上下文的javaconfig是可能的。我正在探索各种选择,特别是Spring3.0。欢迎你向任何方向提出建议。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Sae1962    14 年前

    对我来说这听起来像你想 serialize Java类到DB。据我所知,这是完全可以的,虽然我从来没有做过自己。这里有一个指向 tutorial ,但您可以轻松地在谷歌上搜索更多内容。

    哦,仔细想想,为什么实际上需要在数据库中存储一个完整的类实例?是否足够存储完全限定的类名,然后通过spring加载并实例化该类(所需的属性也可能来自配置)?

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

    如果可以限制最终用户提供可序列化的策略类,则序列化可能是一个可行的选项。请注意,序列化有它自己的怪癖,所以正确地执行它需要比一般的Java知识更深。乔希·布洛赫 Effective Java 2nd Ed. 把整个第11章献给连载。执行外部方提供的代码也可能带来安全风险。

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

        2
  •  0
  •   Michael Neale    14 年前

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