Весна @PostConstruct и инит-метод атрибута
есть ли разница между использованием @PostConstruct
аннотация и объявление того же метода, что и init-method
в XML-конфигурация Spring?
4 ответа:
нет, практически я не думаю, что есть какая-то разница, но есть приоритеты в том, как они работают.
@PostConstruct
,init-method
являются BeanPostProcessors.
@PostConstruct
является аннотацией JSR-250 в то время какinit-method
Это способ Spring иметь метод инициализации.- если у вас
@PostConstruct
метод, это будет вызвано сначала перед вызовом методов инициализации.- если ваш бин реализует InitializingBean и переопределяет
afterPropertiesSet
, первый@PostConstruct
называется, потомafterPropertiesSet
а тоinit-method
.для получения дополнительной информации вы можете проверить пружины документация.
нет никакой реальной разницы. Это зависит от того, как вы предпочитаете настраивать свою систему, и это вопрос личного выбора. Сам я предпочитаю использовать
@PostConstruct
аннотации для моего собственного кода (как Боб только правильно настроен после вызова метода), и я используюinit-method
при создании экземпляров бобов из библиотек, не связанных с Spring (конечно, там нельзя применять аннотации!) но я могу полностью понять людей, желающих сделать все это так или иначе.
@postconstruct не является частью весны. Это часть пакета javax. Оба такие же. используя init-метод нам нужно добавить в xml-файл.При использовании @postconstruct добавление в xml не требуется. Ознакомьтесь с приведенной ниже статьей .
полный код здесь: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: [магия]