【问题标题】:Reflection in Struts 2Struts 2 中的反射
【发布时间】:2015-01-31 10:05:21
【问题描述】:

我有一个包含大约 30 个变量的动作类。这些字段的 getter 和 setter 会弄乱我的代码并添加不必要的行。有没有办法反映所有 private 字段并使它们对 Struts “可见”?

【问题讨论】:

  • 你想在哪里使用这个功能?在表示层(屏幕)上?
  • 是的@Buhake Sindi。 Struts 似乎只能通过 getter 和 setter 访问变量,但这不是好的做法
  • @VladMatvei 在Java Beans 中使用getter 和setter 一个好习惯,但是你的问题是额外的+1。
  • 谢谢罗曼!我认为 ORM 通过反射来访问类的私有字段。但我不确定。
  • 2014 年不得不使用 struts 的遗憾。

标签: java reflection struts2 ognl private-members


【解决方案1】:

听起来对我来说是错误的方法。

Getter 和 setter 在 Java 的 OO 和封装概念中是非常基础的。如果您不喜欢编写 getter 和setter,可以使用Lombok (http://projectlombok.org/index.html) 之类的框架,或者选择其他语言,例如Gradle。

大多数(如果不是全部)Java 代码都使用它们,所以您认为它们会弄乱代码的看法可能有点错误。一个好的 IDE 应该可以帮助您解决这个问题。

哦,反射增加了巨大的性能开销,并且完全不意味着对私有成员的访问短路。

【讨论】:

    【解决方案2】:

    OGNL 的工作实际上并不需要 getter 和 setter。但不要那样做。

    如果您关心的是更大类的“开销”,那么创建一个封装视图状态的对象并仅公开它。您也可以通过ModelDriven 接口执行此操作;有一些注意事项。

    Getter 和 setter 是 Java 课程的标准。习惯它。使用自动折叠简单的 getXxx/setXxx 方法的 IDE。开始使用演示者模式来封装视图状态,并将它们用作 Web 和业务领域对象之间的转换层。

    【讨论】:

    • 我的实体是不可变的,我猜 ModelDriven 接口对我不起作用。但是我可以写一个 DTO 对象,那会是一个好方法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 2012-07-07
    • 2016-08-25
    • 1970-01-01
    • 2018-06-12
    相关资源
    最近更新 更多