JavaJSR-303无字节码编织的自动Bean验证

JavaJSR-303无字节码编织的自动Bean验证,java,bean-validation,byte-buddy,Java,Bean Validation,Byte Buddy,有没有一种方法可以执行(或多或少)“自动”JSR-303JavaBean验证,而无需对类进行运行时修改 通常我会看到人们使用AspectJ来完成这项工作,但在使用运行时代码编织(如)时,我们遇到了太多复杂的问题,我希望避免这种情况。这使得我们的许多构建工具失败,因为运行时类文件与磁盘上的类文件不同 我已经研究过通过反射,它只能代理接口(公共方法),如果你调用“this”中的任何注释,你就不会再通过代理,所以你会失去验证 我还研究了一种可能通过包装/重新定义类来拦截方法调用的方法。这里可能有一些东

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

通常我会看到人们使用AspectJ来完成这项工作,但在使用运行时代码编织(如)时,我们遇到了太多复杂的问题,我希望避免这种情况。这使得我们的许多构建工具失败,因为运行时类文件与磁盘上的类文件不同

我已经研究过通过反射,它只能代理接口(公共方法),如果你调用“this”中的任何注释,你就不会再通过代理,所以你会失去验证

我还研究了一种可能通过包装/重新定义类来拦截方法调用的方法。这里可能有一些东西,但我不知道如何拦截私有方法,或者在不重新修改原始类的情况下完成上述操作


有什么想法吗?

理论上,您只能通过反射来实施bean验证。但是我假设自动,你的意思是没有对验证方法的显式调用


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

我相信Spring可以使用CGLib,但我不熟悉其
@Valid
路由的内部结构。