Java 字节码生成
我有一个bean类Java 字节码生成,java,bytecode,byte-buddy,Java,Bytecode,Byte Buddy,我有一个bean类 BeanClass { <prop1>; <prop2>; <prop3>; //getters and setters ... } 我想生成一个如下所示的验证器- BeanValidator { ValidationResult validate(BeanClass bean) { ValidationResult validationResult = new ValidationResult();
BeanClass {
<prop1>;
<prop2>;
<prop3>;
//getters and setters
...
}
我想生成一个如下所示的验证器-
BeanValidator {
ValidationResult validate(BeanClass bean) {
ValidationResult validationResult = new ValidationResult();
//prop1, prop3 are mandatory...
notNull(bean.getProp1(), validationResult);
notNull(bean.getProp3(), validationResult);
//prop2 must not be more than 255 characters in length
doesNotExceedMaxLength(bean.getProp2(), 255, validationResult)
return validationResult;
}
}
在运行时查看bean类时,将决定哪些字段是必需的,哪些字段的值不能超过某个数字
如何使用Byte Buddy执行此操作?我认为您不想为此使用Byte Buddy。这就是反射API的用途。使用Byte Buddy不会给您带来任何性能优势,并且由于Byte Buddy不会创建任何源代码,您也不会进一步记录您的应用程序
为什么要使用代码生成来实现这样的验证器?我们必须验证数百万项。反思getter并在bean实例上调用它们(即使方法实例被缓存)并不能解决这个问题。我使用reflect asm并获得了显著的性能改进。我想为什么不进一步生成验证器本身呢。
BeanValidator {
ValidationResult validate(BeanClass bean) {
ValidationResult validationResult = new ValidationResult();
//prop1, prop3 are mandatory...
notNull(bean.getProp1(), validationResult);
notNull(bean.getProp3(), validationResult);
//prop2 must not be more than 255 characters in length
doesNotExceedMaxLength(bean.getProp2(), 255, validationResult)
return validationResult;
}
}