Pull to refresh

Comments 7

У меня как раз недавно такая задача была - по окончанию загрузки Spring Boot надо было выполнить некоторые действия.

С @PostConstructне прокатило - пока это выполнялось - приложение не отвечало

А с @EventListener(ApplicationReadyEvent.class)все ОК

В последнем варианте не описано где должен находиться класс BeanInitMethodImpl.

В том же пакете что DemoApplication и или иметь какую-то аннотацию? Не ясно как Spring будет искать метод (по имени) который нужно выполнить и что будет если несколько классов будут иметь метод с таким именем. Будет ли вызвано исключение, если среди найденных по имени методов часть будут иметь входные параметры или тип выходного значения отличный от void. Ну или все неподходящий по сигнатуре методы проигнорируются.

Ещё интересный момент, если метод будет бросать проверяемое исключение, он сможет бы использован на предзагрузке?

Написано же,

Метод, предоставленный в initMethod, должен быть void и не иметь аргументов. Этот метод может быть даже private.

initMethod - это метод создаваемого бина. Де-факто, то же самое, что и @PostConstruct, только через механизмы spring, а не стандартные java-овые.

Да, я это все прочитал. Вопрос, что будет если нарушить правила :)

Просто упадет с ошибкой, просто проигнорирует неподходящие методы, выдаст при старте в лог диагностику или еще что-то.

Когда нам нужно было проделать манипуляции в БД с поддержкой транзакций, но до полной загрузки приложения, мы использовали интерфейс SmartInitializingSingleton.

При вызове метода, помеченного аннотацией @PostConstruct , транзакции еще не работают

Если нужна конфигурация бина то можно так

@SpringBootConfiguration
public class Configuration {
		...
  	...
    
    @Autowired
    public void registerCustomConverters(FormatterRegistry registry) {
        registry.addConverter(new StringToRangeHeaderConverter());
    }
}

К модификатору доступа у метода с аннотацией @PostConstruct есть вопрос: а не должен ли он быть private?

Не нарушением ли мы инкапсуляцию, добавляя метод как часть контракта?

Sign up to leave a comment.

Articles