Как заставить Spring Boot создать валидатор bean-компонентов перед созданием всех остальных bean-компонентов

Я пытаюсь добавить LocalValidatorFactoryBean в существующее веб-приложение Spring Boot.

Независимо от того, что я пробовал (перечислено ниже), он создает валидатор только после большинства других компонентов (проверено как с помощью журналирования, так и с помощью точек останова), поэтому они никогда не проверяются.

Кстати, у меня есть hibernate-validator в пути к классам, и я пытаюсь использовать javax.validation.constraints для своих свойств @Component.

Класс приложения имеет @Configuration, @EnableAutoConfiguration и @ComponentScan({"my.package.**"}).

  • Добавление application.xml с bean-компонентом <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
  • Добавление вышеуказанного bean-компонента в validator.xml и добавление @ImportResource("validator.xml")
  • Добавление нового @Bean в класс Application. public Validator validator() { return new LocalValidatorFactoryBean(); }
  • Добавление @Order(Ordered.HIGHEST_PRECEDENCE) к вышеуказанному @Bean
  • Добавление BeanValidator @Component к отсканированным пакетам.
  • И добавив к нему @Order.

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

Прошло несколько лет с тех пор, как я использовал Spring, но я не помню этих проблем при определении всего в application.xml. Это просто то, что spring-boot не поддерживает, и мне следует вернуться к традиционной конфигурации приложения Spring?

Как я могу заставить его проверять все мои бобы?


person OrangeDog    schedule 08.12.2015    source источник
comment
afaik только добавление валидатора не поможет вам, независимо от того, насколько рано он будет создан (если только это не будет для @ConfigurationProperties для Spring Boot, который поддерживает его и выполняется на ранней стадии процесса, поэтому для вас уже есть экземпляр ), но не проверяет @Component bean-компоненты.   -  person M. Deinum    schedule 08.12.2015
comment
Значения в настоящее время устанавливаются из yaml, если это актуально. Использование @Value, чтобы можно было указать значения по умолчанию.   -  person OrangeDog    schedule 08.12.2015
comment
Это все еще не будет их проверять, на самом деле это работает только для весенней загрузки в @ConfigurationProperties, а не для других компонентов. И я не припомню, чтобы что-то подобное когда-либо было доступно...   -  person M. Deinum    schedule 08.12.2015
comment
Но обычно это работает с обычными приложениями Spring, верно?   -  person OrangeDog    schedule 08.12.2015
comment
Нет, не то, что я знаю, по крайней мере, не для проверки bean-компонентов в контексте приложения. Он работает для сущностей гибернации и веб-мвк. Не для произвольных компонентов в контексте приложения. За 13 лет весны я ни разу не видел, чтобы что-то подобное работало без кастомных BeanPostProcessor. Так что нет, это никогда не работало так «из коробки».   -  person M. Deinum    schedule 08.12.2015


Ответы (1)


Я забыл сделать BeanValidationPostProcessor.

person OrangeDog    schedule 09.12.2015