【问题标题】:Byte Buddy Code Generation字节伙伴代码生成
【发布时间】:2015-06-08 15:05:35
【问题描述】:

我有一个 bean 类

BeanClass {

  <prop1>;
  <prop2>;
  <prop3>;

  //getters and setters
  ...
}

和一个验证实用程序:

Validations {

  static void notNull(Object value, ValidationResult result) {
    if (...) {
      ...
    }
  }

  static void doesNotExceedMaxLength(Object value, int max, ValidationResult result) {
    if (...) {
      ...
    }
 }

我想生成一个如下所示的验证器 -

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 做到这一点?

【问题讨论】:

    标签: java bytecode byte-buddy


    【解决方案1】:

    我认为您不想为此目的使用 Byte Buddy。这就是反射 API 的用途。使用 Byte Buddy 不会为您带来任何性能优势,并且由于 Byte Buddy 不会创建任何源代码,您也不会进一步记录您的应用程序。

    您为什么要使用代码生成来实现这样的验证器?

    【讨论】:

    • 我们必须验证数以百万计的项目。反思 getter 并在 bean 实例上调用它们(即使方法实例被缓存)只是不会削减它。我使用了 reflect-asm 并获得了显着的性能改进。想想为什么不更进一步,自己生成验证器。
    猜你喜欢
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多