java spring bean-validation applicationcontext

java - Inicializando Spring bean del método estático de otra clase?



bean-validation applicationcontext (2)

Intenté crear el bean Hibernate Validator, y me encontré con este problema al crear un bean del método de fábrica estático en otra clase. Encontré una forma de Spring para inicializar mi bean Validator (solución en la parte inferior), pero el problema en sí no se resuelve. El validador se usa como ejemplo de caso aquí.

Así es como creo la instancia de Validator en Java

import javax.validation.Validation; import javax.validation.Validator; import javax.validation.ValidatorFactory; ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); Validator validator = factory.getValidator();

Así es como traté de crear el bean en applicationContext.xml

<bean id="validatorFactory" class="javax.validation.ValidatorFactory" factory-method="javax.validation.Validation.buildDefaultValidatorFactory" /> <bean id="validator" class="javax.validation.Validator" factory-bean="validatorFactory" factory-method="getValidator" />

Lo que entiendo es que en "método de fábrica" ​​solo se puede acceder a los métodos estáticos definidos en la clase definida en el parámetro "clase". Como el método buildDefaultValidatorFactory () es estático, no puedo crear una instancia de Validación y darle como "factory-bean" para validatorFactory de esta manera:

<bean id="validation" class="javax.validation.Validation" /> <bean id="validatorFactory" class="javax.validation.ValidatorFactory" factory-bean="validation" factory-method="buildDefaultValidatorFactory" />

Esto termina en un mensaje de error

"Compruebe que existe un método con el nombre especificado y que no es estático "

La pregunta es, ¿cómo crearías frijol en esta clase de situación en primavera?

Así es como resolví el problema del Validator:

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>


¿Has intentado esto?

<bean id="validatorFactory" class="javax.validation.Validation" factory-method="buildDefaultValidatorFactory" /> <bean id="validator" class="javax.validation.Validator" factory-bean="validatorFactory" factory-method="getValidator" />


El factory-method solo debe contener el nombre del método, sin incluir el nombre de la clase.

Si desea utilizar una fábrica estática, proporcione la class de la fábrica (!) A la declaración de frijoles, si desea usar una fábrica de instancias, dé la declaración de frijoles de factory-bean a la declaración de frijoles, pero no brinde ambas: la clase del frijol creado no se da en la declaración del frijol.

Así que un ejemplo completo debería verse así, usando una fábrica estática para validatorFactory y una fábrica de instancias para el validator :

<bean id="validatorFactory" class="javax.validation.Validation" factory-method="buildDefaultValidatorFactory" /> <bean id="validator" factory-bean="validatorFactory" factory-method="getValidator" />

Ver detalles en la documentación:

http://static.springsource.org/spring/docs/2.0.x/reference/beans.html#beans-factory-class-static-factory-method

Para responder a tu pregunta: ¿cómo crearías frijol en esta clase de situación en primavera? - Hazlo exactamente como se muestra aquí, o si puedes, utiliza una clase de utilidad como LocalValidatorFactoryBean , que simplifica la configuración de Spring.