Spring предоставляет три дескриптора для проверки bean-компонента.
1.abstract класс AbstractPropertyValidationAnnotationHandler
2.abstract класс AbstractMethodValidationAnnotationHandler
3.abstract class ClassValidationAnnotationHandler
В этом примере я реализую пользовательскую аннотацию CustomAnnotationHandle
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
Class CustomAnnotationHandle extends Annotation{
public abstract String value();
}
Для реализации пользовательской аннотации для проверки свойства нам необходимо расширить AbstractPropertyValidationAnnotationHandler Class.
AbstractPropertyValidationAnnotationHandler предоставляет абстрактный метод createValidationRule
protected abstract AbstractValidationRule createValidationRule(Annotation annotation, Class class1, String s);
Таким образом, расширенный класс должен обеспечивать реализацию
protected abstract AbstractValidationRule createValidationRule(Annotation annotation, Class class1, String s)
public class CustomPropertyAnnotationHandler extends AbstractPropertyValidationAnnotationHandler
{
public CustomPropertyAnnotationHandler()
{
super(new Class[] {
XXX.XXX.PackageLevle.CustomAnnotationHandle // as it takes array of custom annotation ,so we can pass more than one
// overwriting abstract method
protected AbstractValidationRule createValidationRule(Annotation annotation, Class class1, String s){
CustomAnnotationHandle value = (CustomAnnotationHandle)annotation;
return TestValidationRule(value.getValue());
// as you can see it return AbstractValidationRule.So, we need a class to give our bean specific validation rule.In our case it is
//TestValidationRule
}
}
}
public class TestValidationRule extends AbstractValidationRule
{
public TestValidationRule (String valuetest)
{
super();
this.valuetest = valuetest;
}
Private String valuetest;
}
Spring для представленияClass.Этот класс используется для собственной аннотации весны для проверки бина.
Класс DefaultValidationAnnotationHandlerRegistry используется в качестве defaultHandlerRegistry. Но если нам нужно предоставить собственное аннотирование, тогда нам
необходимо расширить AnnotationBeanValidationConfigurationLoader и установить нашу специальную дескрипторную регистрацию с помощью метода setHandlerRegistry (new )HenlerRegistry (new )Hernler (new )Property (new CustomHperty) (new CustomHperty);1033 *
Класс DefaultValidationAnnotationHandlerRegistry используется для регистрации собственной аннотации весны для проверки bean-компонента. Он регистрируется компонентом
, вызывая метод registerPropertyHandler класса SimpleValidationAnnotationHandlerRegistry. Поэтому для нашей пользовательской аннотации нам нужно
1038CustomPropertyAnnotationHandler с помощью вызова метода registerPropertyHandler класса SimpleValidationAnnotationHandlerRegistry
public class OurBeanSpecificValidationLoader extends AnnotationBeanValidationConfigurationLoader
{
public OurBeanSpecificValidationLoader ()
{
super();
setHandlerRegistry(new OurSpecificAnnotationHandleRegistery ());
}
}
public class OurSpecificAnnotationHandleRegistery extends DefaultValidationAnnotationHandlerRegistry
{
public OurSpecificAnnotationHandleRegistery ()
{
registerPropertyHandler(new CustomPropertyAnnotationHandler() );
}
}
, поэтому у вас есть пользовательская аннотация для оценки bean-компонента. Например,
@CustomAnnotationHandle(value = "test")
private Object test;