2016-06-22 2 views
1

Je parcourais la documentation d'Hibernate et j'ai découvert cet article pour activer Autowiring dans les validateurs personnalisés.Comment implémenter un ConstraintValidatorFactory personnalisé afin d'utiliser @Autowiring dans des validateurs personnalisés

https://docs.jboss.org/hibernate/validator/5.1/reference/en-US/html/chapter-bootstrapping.html#example-using-custom-constraint-validator-factory

Mais je ne comprends pas la mise en œuvre du getInstance et la libération des méthodes. Fondamentalement, je ne suis pas sûr de ce que je suis supposé écrire en eux.

Est-ce que quelqu'un peut me diriger dans la bonne direction?

+0

Juste à cet effet du printemps a déjà [SpringConstraintValidatorFactory] (https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/validation/beanvalidation/SpringConstraintValidatorFactory.html) – Lu55

Répondre

0

Regardez la documentation de ces deux méthodes:

public interface ConstraintValidatorFactory { 

/** 
* @param key The class of the constraint validator to instantiate. 
* 
* @return A new constraint validator instance of the specified class. 
*/ 
<T extends ConstraintValidator<?,?>> T getInstance(Class<T> key); 

/** 
* Signal ConstraintValidatorFactory that the instance is no longer 
* being used by the Bean Validation provider 
* 
* @param instance validator being released 
*/ 
void releaseInstance(ConstraintValidator<?,?> instance); 
} 

Il devrait alors être clair que le premier doit retourner une nouvelle instance d'un ConstraintValidator et l'autre devrait faire tout ce qui est nécessaire pour faire un nettoyage . C'est alors à vous de décider comment les implémenter. Ce link a un exemple comment implémenter getInstance en utilisant BeanManagerProvider mais vous pouvez également avoir une implémentation très simple qui utilise des instructions if, puis en appelant quelque chose comme new MyConstraintValidator.... L'implémentation de releaseInstance dépend de si vous devez faire quelque chose lorsque l'instance n'est plus utilisée.