java - Java 中的动态或运行时实例级元数据

标签 java

我们如何最好地设计管理 Java 对象的运行时元数据?

例如:

对于类似 ORM 的解决方案,其中使用统一的 api 持久保存对象图。我们可能想要收集元数据,例如属性的到期时间。 session 在预设时间后到期

User
 |
 Session 

目前这可以通过注释来实现,

User
 |
 |
  @Expire(3000)
  Session

但是,如果我们根据其他逻辑(例如服务器是在白天还是晚上创建 session )来计算 session 过期时间。上述方法行不通。

示例2:

  1. “Expire”是一个框架产品,可用于 同一张图表中的多个位置以不同的方式。
  2. 同样,注释的值在设计时/编译时也是未知的。 例如:每个用户都可以选择自己的密码有效期。 同样,每个用户的 session 过期时间计算方式可能不同
User
 |
 |
  @Expire
  password
 |
 |
  @Expire
  session

我们怎样才能最好地得到这个而不将到期时间设置为 session 中的字段?作为 ORM,我们无法区分数据与此类特殊字段,因此必须在运行时收集此元数据。

最佳答案

您可以有一个接口(interface)ExpiryManager来计算这个复杂的逻辑,然后您可以使用这样的注释:

@Expire(logic=MyExpiryManager.class)
Session

注释并不限于整数文字,但这更多的是关于您想要设计的 API 有多奇怪。

关于java - Java 中的动态或运行时实例级元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25025329/

相关文章:

java - Thymeleaf + Spring Security 集成

java - 向 Maven-Java-project 添加持久性时出错(org.codehaus.mojo)?

java - 在 Morphia createQuery 方法中传递集合名称是一个好习惯吗?

java - 通用编程有必要吗?

Java/泛型/数组问题

java - 单击单选按钮时如何显示微调器

java - 将 LazySeq 从 Clojure 返回到 Java 时出现 ClassCastException

java - if else 语句无法正常工作

Java注解,属性值必须是常量

java - ECLIPSE:如何禁用 "Google Java Indexer"