2015-06-08 3 views
1

У меня есть класс компонентаByte Buddy Генерация кода

BeanClass { 

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

    //getters and setters 
    ... 
} 

и утилиту Validations:

Validations { 

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

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

Я хотел бы генерировать Validator, как показано ниже -

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; 
    } 
} 

Решение из каких полей являются обязательными и для которых значения не должны превышать определенного количества, будут выполняться во время выполнения, смотря на класс компонента.

Как я могу это сделать с Байт Бадди?

ответ

0

Я не думаю, что вы хотите использовать Byte Buddy для этой цели. Это то, для чего создан API отражения. Использование Byte Buddy не дает вам каких-либо преимуществ в производительности, и поскольку Byte Buddy не создает никакого исходного кода, вы не будете документировать ваше приложение дальше.

Почему вы хотите использовать генерацию кода для реализации такого валидатора?

+0

Мы должны проверить миллионы и миллионы предметов. Отражение на геттерах и вызов их в экземплярах bean (даже когда экземпляры экземпляров кэшируются) просто не разрезают его. Я использовал рефлексив и получил значительные улучшения в производительности. Подумайте, почему бы не пойти еще дальше и создать валидатор. – user869081

Смежные вопросы