1

有没有一种方法可以执行(或多或少)“自动”JSR-303 java bean 验证,而无需对类进行运行时修改?

通常我看到人们使用 AspectJ 来实现这一点,但是在使用运行时代码编织(如cofoja )时我们遇到了很多复杂情况,我想避免它。它使我们的许多构建工具失败,因为运行时类文件与磁盘上的类文件不同。

我已经通过只能代理接口(公共方法)的反射查看了动态代理,并且如果您在“this”中调用任何带注释的内容,您将不再通过代理,因此您将失去该验证。

我还查看了ByteBuddy,寻找一种通过包装/重新定义类来拦截方法调用的方法。这里可能有一些东西,但我不知道如何拦截私有方法或完成上述操作,而无需重新修改原始类。

有任何想法吗?

4

1 回答 1

2

理论上,您可以仅通过反射来强制执行 bean 验证。但我假设自动,你的意思是没有明确调用验证方法。

在这种情况下,仪器可能是您唯一的选择。使用 Byte Buddy,您可以使用重新定义或变基来检测现有方法。最简单的方法是使用代理构建器的 Java 代理或使用 Gradle 或 Maven 插件进行构建时间检测。该文档提供了一个如何实现代理的示例,并且构建工具有很多 javadoc(正在进行中的文档)。

于 2016-09-16T23:49:31.133 回答