【问题标题】:How to store the state of Java bean in a non web application?如何在非 Web 应用程序中存储 Java bean 的状态?
【发布时间】:2018-01-03 16:14:00
【问题描述】:

作为我的 RFT QA 自动化的一部分,我必须存储 Java bean 的状态(对象)并且应该在整个应用程序中访问该对象,单例可能无法在这里工作,因为它不是一个 Web 应用程序,请您建议任何其他存储 java bean 状态的方法。

感谢您的帮助。

谢谢

【问题讨论】:

  • 单例与网络应用没有任何关系
  • 你可以使用单例
  • 但是当我尝试访问对象时,它可能会被 GC 声明,它将创建一个新实例,我将失去状态。我想在整个应用程序中保持相同的状态直到我的测试脚本完成。
  • GC 不会触及你的单例,因为它引用了它自己。

标签: java rft


【解决方案1】:

我不确定你的问题,但为什么不:

  • 将对象序列化到磁盘/数据库/...
  • 使用静态存储(静态单例)

【讨论】:

  • 我可以使用包含所有值的静态 Map 创建一个类,但我需要一个带有 setter 和 getter 的类,例如 java bean..
  • 您还可以创建:包含静态对象的类或包含对象的静态映射,然后您可以使用 getter 和 setter:-MyClass.myStaticObject.getX()/MyClass.MyStaticObject.setX("val" ) -MyClass.myStaticMap.get("objId").getX()/MyClass.myStaticMap.get("objId").setX("val")
  • 当对象的引用存在时,您的对象将永远不会被 GC 收集。此规则的唯一例外是当您使用弱引用 (WeakHashMap,...)
【解决方案2】:

基本上这是一个典型的序列化/反序列化问题。通常,您需要能够将类的状态写入持久层,然后能够从持久层恢复“相同”实例。有一个通过Serializable 接口工作的内置Java mechanizm。然而,由于其不便,它很少使用。最流行的方法之一是将您的类实例序列化为 JSON 或 XML 格式,然后将其读回并从该格式实例化。如果您需要 Text 是人类可读的,则首选 XML,否则 JSON 是通常的选择。用于 JSON 序列化的最佳工具是 JSON Jackson (FasterXML/jackson) 以下是相关链接:Json Jackson home。您需要使用的主要类是ObjectMapper。它很容易使用。这是example 的文章。获得实例的 Json 字符串后,将其写入文件或数据库,然后读取它并使用 ObjectMapper 重新创建实例。它很简单,效果很好

【讨论】:

    猜你喜欢
    • 2015-09-08
    • 1970-01-01
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 2011-10-15
    相关资源
    最近更新 更多