将动态参数传递给注释

2023-12-01

我想知道是否有可能将动态值传递给注释属性。

我知道注释不是为了修改而设计的,但我正在使用休眠过滤器在我的情况下,要放置的条件不是静态的。

我认为唯一的解决方案是使用旨在读取和修改字节码的库,例如 Javassist 或ASM但如果有其他解决方案那就更好了。

ps:我的情况的困难是我应该修改注释(属性的值),但是我上面提到的库允许创建而不是编辑,这就是为什么我想知道另一个解决方案

提前致谢


我不知道它是否与您的框架很好地集成,但我想建议以下内容:

  • 创建一个注释,该注释接收实现验证规则的类
  • 创建一个注解可以接收的接口
  • 为具有规则逻辑的接口创建一个实现
  • 将注释添加到您的模型类中
  • 创建一个注释处理器,对每个注释字段应用验证

我用 Groovy 编写了以下示例,但使用了标准 Java 库和惯用的 Java。如果有任何内容不可读,请警告我:

import java.lang.annotation.*

// Our Rule interface
interface Rule<T> { boolean isValid(T t) }

// Here is the annotation which can receive a Rule class
@Retention(RetentionPolicy.RUNTIME)
@interface Validation { Class<? extends Rule> value() }

// An implementation of our Rule, in this case, for a Person's name
class NameRule implements Rule<Person> {
  PersonDAO dao = new PersonDAO()
  boolean isValid(Person person) {
    Integer mode = dao.getNameValidationMode()
    if (mode == 1) { // Don't hardcode numbers; use enums
      return person.name ==~ "[A-Z]{1}[a-z ]{2,25}" // regex matching
    } else if (mode == 2) {
      return person.name ==~ "[a-zA-Z]{1,25}"
    }
  }
}

在这些声明之后,用法:

// Our model with an annotated field
class Person {
  @Validation(NameRule.class)
  String name
}

// Here we are mocking a database select to get the rule save in the database
// Don't use hardcoded numbers, stick to a enum or anything else
class PersonDAO { Integer getNameValidationMode() { return 1 } }

注解的处理:

// Here we get each annotation and process it against the object
class AnnotationProcessor {
  String validate(Person person) {
    def annotatedFields = person.class.declaredFields.findAll { it.annotations.size() > 0 }
    for (field in annotatedFields) {
      for (annotation in field.annotations) {
        Rule rule = annotation.value().newInstance()
        if (! rule.isValid(person)) {
          return "Error: name is not valid"
        }
        else {
          return "Valid"
        }
      }
    }
  }
}

和测试:

// These two must pass
assert new AnnotationProcessor().validate( 
  new Person(name: "spongebob squarepants") ) == "Error: name is not valid"

assert new AnnotationProcessor().validate( 
  new Person(name: "John doe") ) == "Valid"

另外,看看G合同,它提供了一些有趣的通过注释进行验证的模型。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将动态参数传递给注释 的相关文章

  • Eclipse 在源代码管理中保存操作

    我们希望找到一种在签入之前执行代码标准的 轻量级 方法 我们真的很喜欢使用 Eclipse 内置的想法保存操作 go to Preferences gt gt Java gt gt Editor gt gt Save Actions 其中有
  • 在文本文件中写入多行(java)

    下面的代码是运行命令cmd并使用命令行的输出生成一个文本文件 下面的代码在 Eclipse 的输出窗口中显示了正确的信息 但在文本文件中只打印了最后一行 谁能帮我这个 import java io public class TextFile
  • 如何在android上的python kivy中关闭应用程序后使服务继续工作

    我希望我的服务在关闭应用程序后继续工作 但我做不到 我听说我应该使用startForeground 但如何在Python中做到这一点呢 应用程序代码 from kivy app import App from kivy uix floatl
  • 如何创建一个显示 Spinners 的 x 和 y 值的表格?

    我想创建一个位于图表右侧的表格 其中显示 2 列 x 和 y 值已输入到xSpin and ySpin旋转器 我已经画了一张我想要桌子放置的位置的图 我尝试过在网格窗格布局中使用文本框来创建表格并将值直接输入到文本框网格中 但是我无法将它们
  • 这个函数(for循环)空间复杂度是O(1)还是O(n)?

    public void check 10 for string i list Integer a hashtable get i if a gt 10 hashtable remove i 这是 O 1 还是 O n 我猜测 O n 但不是
  • Java:如何从转义的 URL 获取文件?

    我收到了一个定位本地文件的 URL 事实上我收到的 URL 不在我的控制范围内 URL 按照 RFC2396 中的定义进行有效转义 如何将其转换为 Java File 对象 有趣的是 URL getFile 方法返回一个字符串 而不是文件
  • Java AES 128 加密方式与 openssl 不同

    我们遇到了一种奇怪的情况 即我们在 Java 中使用的加密方法会向 openssl 生成不同的输出 尽管它们在配置上看起来相同 使用相同的键和 IV 文本 敏捷的棕色狐狸跳过了懒狗 加密为 Base64 字符串 openssl A8cMRI
  • 如何在不超过最大值的情况下增加变量?

    我正在为学校开发一个简单的视频游戏程序 我创建了一个方法 如果调用该方法 玩家将获得 15 点生命值 我必须将生命值保持在最大值 100 并且由于我目前的编程能力有限 我正在做这样的事情 public void getHealed if h
  • Java 文件上传速度非常慢

    我构建了一个小型服务 它从 Android 设备接收图像并将其保存到 Amazon S3 存储桶中 代码非常简单 但是速度非常慢 事情是这样的 public synchronized static Response postCommentP
  • hibernate锁等待超时超时;

    我正在使用 Hibernate 尝试模拟对数据库中同一行的 2 个并发更新 编辑 我将 em1 getTransaction commit 移至 em1 flush 之后我没有收到任何 StaleObjectException 两个事务已成
  • 在 Netbeans 8 上配置 JBoss EAP 的问题

    我已经下载了 JBoss EAP 7 并正在 Netbeans 8 上配置它 我已经到达向导 实例属性 其中要求从选择框中选择 域 当我打开选择框时 它是空的 没有什么可以选择的 因此 完成 按钮也处于非活动状态 这使得无法完成配置 我通过
  • 将 SignedHash 插入 PDF 中以进行外部签名过程 -workingSample

    遵循电子书第 4 3 3 节 PDF 文档的数字签名 https jira nuxeo com secure attachment 49931 digitalsignatures20130304 pdf 我正在尝试创建一个工作示例 其中 客
  • 很好地处理数据库约束错误

    再一次 它应该很简单 我的任务是在我们的应用程序的域对象中放置一个具有唯一约束的特定字段 这本身并不是一个很大的挑战 我刚刚做了以下事情 public class Location more fields Column unique tru
  • 如何在 Java 中测试一个类是否正确实现了 Serialized(不仅仅是 Serialized 的实例)

    我正在实现一个可序列化的类 因此它是一个与 RMI 一起使用的值对象 但我需要测试一下 有没有办法轻松做到这一点 澄清 我正在实现该类 因此在类定义中添加 Serialized 很简单 我需要手动序列化 反序列化它以查看它是否有效 我找到了
  • 如何在selenium服务器上提供自定义功能?

    我知道可以通过某种方法获得一些硒功能 其中之一如下 driver getCapabilities getBrowserName 它返回浏览器名称的值 但如果它指的是一个可用的方法 如果我没有误解的话 这似乎与自定义功能有关 就像我的意思是
  • IntelliJ - 调试模式 - 在程序内存中搜索文本

    我正在与无证的第三方库合作 我知道有一定的String存储在库深处的某个字段中的某处 我可以预测的动态值 但我想从库的 API 中获取它 有没有一种方法可以通过以下方式进行搜索 类似于全文搜索 full程序内存处于调试模式并在某个断点处停止
  • 在 Spring 中重构这个的最佳方法?

    private final ExecutorService executorParsers Executors newFixedThreadPool 10 public void parse List
  • 如何在JSTL中调​​用java方法? [复制]

    这个问题在这里已经有答案了 这可能是重复的问题 我只想调用不是 getter 或 setter 方法的方法例如 xyz 类的 makeCall someObj stringvalue Java类 Class XYZ public Strin
  • Java中的Object类是什么?

    什么是或什么类型private Object obj Object http download oracle com javase 6 docs api java lang Object html是Java继承层次结构中每个类的最终祖先 从
  • Eclipse 中 Spring MVC 模型对象的 (jsp /jstl) 视图中的代码辅助

    在 Spring MVC 中 当将对象放置在视图模型中时 如下所示 public String getUser Model model fetch user model addAttribute user user return viewN

随机推荐

  • 如何用CSS将图像放入div中?

    我希望将所有图像都放在 CSS 中 我知道的唯一方法是将它们作为背景图像放入 但这个解决方案的问题是你永远不能让 div 占据图像的大小 所以我的问题是 最好的方法是什么 div img src div in CSS 这个答案由Jaap d
  • R 中的等值线地图 - TIGER Shapefile 问题

    有一个关于使用 R 进行绘图的问题 特别是有关 R 中的分区统计图的问题 我有一个分配给某个区域的邮政编码数据集和一些相关数据 数据集是here 我的最终数据格式是 区域 ID 邮政编码 概率值 客户计数 区域概率和区域客户总数 我试图通过
  • CakePHP HABTM 表单提交

    我有两张桌子 questions and tags 具有 HABTM 关系 添加问题时 我希望能够为问题指定一个标签 这只是第一个标签 以后可以添加更多标签 标签是从他们的桌子上拉出来的 如何配置我的应用程序 以便在添加问题并指定标签时 连
  • Django 模型中的任意类型数据

    我有一个模型 比如说 Item 我想在其上存储任意数量的属性 例如标题 描述 发布日期 我希望它们不仅仅是字符串 还有 python 类型 所以字符串 布尔值 日期时间等 我在这里有什么选择 由于所有值的数据库类型相同 因此具有单独的名称
  • 对 MERN Stack 等 Web 和 API 解决方案进行身份验证和授权的最佳方式是什么?

    我正在尝试找到实施授权的最佳方法 此时 我唯一需要的是一个简单的免费帐户 但稍后我可能会包含使用 Stripe 等支付系统的 高级 帐户的用户角色 我已经开始阅读和尝试 Auth0 但后来发现了一些其他方法可以做到这一点 Passport
  • Word 非数字中的 rmarkdown 方程是 q‌u‌e‌s‌t‌i‌on 标记

    在 RStudio 中 rmarkdown 方程符号未在 Word 中重现 当我点击Knit Word时 A pi r 2 在Word文档中变成这样 2 html pdf都没有问题 None
  • 如何影响 Shopware 6.4.13.0 中的模板加载顺序

    这与Shopware 6 插件按什么顺序加载 当覆盖不同插件中的模板时 加载顺序很重要并且取决于插件安装日期 我相信在最近的 Shopware 版本中可以以更好的方式解决这个问题 这是如何运作的 您可以从上一个版本开始添加getTempla
  • php 会话在 Android 应用程序中被破坏

    我正在android中构建一个登录应用程序 其中我点击一个url 带有用户名和密码 直到该部分它工作正常 但之后每当我点击一个url 一旦用户通过身份验证 它什么都不返回 即错误消息 例如请先登录 然而 它在非常相似的 iPhone 应用程
  • 更新面板中的按钮正在执行完整的回发?

    我正在遵循一个如何使用此处的更新面板的简单示例 http www asp net Ajax Documentation Live tutorials IntroductionUpdatePanel aspx 在更新面板之外 我有另一个 ht
  • 在 R 中动态子集调查设计对象

    我试图弄清楚如何动态地对调查设计对象进行子集化 我已经构建了循环来发送字符串 但不知道如何删除引号 因此 R 将其读取为调用 我想循环遍历这样的一些 尽管这显然会中断 因为 SUBSET VARIABLE in 4 需要是一个调用而不是一个
  • Java字节码与不同版本的Java兼容吗?

    如果我使用 Java 5 代码将应用程序编译为字节码 生成的 class 文件能够在 Java 1 4 下运行吗 如果后者可以工作并且我正在尝试在我的 Java 1 4 应用程序中使用 Java 5 框架 是否有有什么我应该注意的吗 Nop
  • JSP形式的空字段是null还是“”?

    当表单传递到 servlet 时 是空字段 还是 null 例如 在一个表单中 您将名字作为字段 将姓氏作为字段院长 名字 姓那么它在 servlet 中注册为什么呢 提前致谢 Dean 简单 如果参数名称存在 但值不存在 则它为空 如果参
  • Billingservice Android - 无签名

    我遵循了以下很棒的教程 http blog blundell apps com simple inapp billing payment 我已经完成了教程中所说的所有内容 并且已将所有内容重新阅读了 3 遍 但我仍然没有收到签名intent
  • 如何构建 SQL 查询来查找作为两个特定其他对象的父对象的对象?

    假设我有 2 个表 分别称为父表和子表 一个父母可以有 0 到多个孩子 一个孩子可以有 1 到多个父母 如何找到作为两个特定子元素的父元素的所有父元素 例如 假设我有父母 p a p b p c p d 和孩子 c a c b 它们的结构如
  • 连续训练多个序列模型会减慢速度

    我正在使用 Keras TensorFlow GPU 创建时间序列预测模型 我有 100 倍的时间序列 想为每个时间序列训练一个网络 连续运行几个时间序列很好 但一旦我运行 100 倍或 1000 倍 每个模型的训练时间就会缓慢增加 但肯定
  • 如何在java中设置jasper报表的边距?

    如何在java中设置jasper报表的边距 我有 reports jasper 带边距 但是打印时我必须更改边距 JasperPrint setTopMargins myMarginsValue 不起作用 I use JRPrintServ
  • 将字符串转换为元组并添加到元组

    我有一个这样的配置文件 rects rect1 2 2 10 10 rect2 12 8 2 10 我需要循环遍历这些值并将它们转换为元组 然后我需要制作一个元组的元组 例如 2 2 10 10 12 8 2 10 除了使用正则表达式或 i
  • 使用键盘快捷键触发 Silverlight Prism 命令

    有谁知道是否可以通过快捷方式触发 prism 命令 我的意思是我希望能够以声明方式定义命令与键盘快捷键的绑定 例如ClientUI does 有没有用于此目的的开源库 或者也许是代码示例 I found 这个问题但我不认为它回答了我的问题
  • 获取通用 List 中 T 的实际类型

    如何在运行时使用反射获取通用列表中 T 的实际类型 这取决于您到底要问什么 在泛型类型中编写代码时Blah
  • 将动态参数传递给注释

    我想知道是否有可能将动态值传递给注释属性 我知道注释不是为了修改而设计的 但我正在使用休眠过滤器在我的情况下 要放置的条件不是静态的 我认为唯一的解决方案是使用旨在读取和修改字节码的库 例如 Javassist 或ASM但如果有其他解决方案