Весна @PostConstruct и инит-метод атрибута


есть ли разница между использованием @PostConstruct аннотация и объявление того же метода, что и init-method в XML-конфигурация Spring?

4 79

4 ответа:

нет, практически я не думаю, что есть какая-то разница, но есть приоритеты в том, как они работают. @PostConstruct,init-method являются BeanPostProcessors.

  1. @PostConstruct является аннотацией JSR-250 в то время как init-method Это способ Spring иметь метод инициализации.
  2. если у вас @PostConstruct метод, это будет вызвано сначала перед вызовом методов инициализации.
  3. если ваш бин реализует InitializingBean и переопределяет afterPropertiesSet , первый @PostConstruct называется, потом afterPropertiesSet а то init-method.

для получения дополнительной информации вы можете проверить пружины документация.

нет никакой реальной разницы. Это зависит от того, как вы предпочитаете настраивать свою систему, и это вопрос личного выбора. Сам я предпочитаю использовать @PostConstruct аннотации для моего собственного кода (как Боб только правильно настроен после вызова метода), и я использую init-method при создании экземпляров бобов из библиотек, не связанных с Spring (конечно, там нельзя применять аннотации!) но я могу полностью понять людей, желающих сделать все это так или иначе.

@postconstruct не является частью весны. Это часть пакета javax. Оба такие же. используя init-метод нам нужно добавить в xml-файл.При использовании @postconstruct добавление в xml не требуется. Ознакомьтесь с приведенной ниже статьей .

http://answersz.com/spring-postconstruct-and-predestroy/

полный код здесь:https://github.com/wkaczurba/so8519187 (spring-boot)

используя аннотации:

@Slf4j
@Component
public class MyComponent implements InitializingBean {

    @Value("${mycomponent.value:Magic}")
    public String value;

    public MyComponent() {
        log.info("MyComponent in constructor: [{}]", value); // (0) displays: Null
    }

    @PostConstruct
    public void postConstruct() {
        log.info("MyComponent in postConstruct: [{}]", value); // (1) displays: Magic
    }

    @Override // init-method; overrides InitializingBean.afterPropertiesSet()
    public void afterPropertiesSet() {
        log.info("MyComponent in afterPropertiesSet: [{}]", value);  // (2) displays: Magic
    }   

    @PreDestroy
    public void preDestroy() {
        log.info("MyComponent in preDestroy: [{}]", value); // (3) displays: Magic
    }
}

нас:

обновление организации.springframework.контекст...

компонент MyComponent в конструктор: [нуль]
компонент MyComponent в postConstruct: [магия]
компонент MyComponent в afterPropertiesSet: [магия]
...

Регистрация бобов для экспозиции JMX при запуске
Запуск демо-приложения за 0,561 секунды (JVM работает за 1,011)
Закрытие орг.springframework.контекст... Отмена регистрации JMX-открытые бобы при выключении

...
компонент MyComponent в выданное predestroy: [магия]