Atsortingbut Spring @PostConstruct vs. init-method

Existe-t-il une différence entre l’utilisation de l’annotation @PostConstruct et la déclaration de la même méthode que la méthode init-method dans la configuration XML de Spring?

Non, pratiquement, je ne pense pas qu’il y ait de différence, mais il y a des priorités dans leur façon de travailler. @PostConstruct , la init-method est BeanPostProcessors.

  1. @PostConstruct est une annotation JSR-250, alors que la init-method est la init-method Spring pour l’initialisation.
  2. Si vous avez une méthode @PostConstruct , celle-ci sera appelée en premier avant l’appel des méthodes d’initialisation.
  3. Si votre bean implémente InitializingBean et remplace afterPropertiesSet , @PostConstruct est d’abord appelé, puis afterPropertiesSet et init-method .

Pour plus d’informations, vous pouvez consulter la documentation de référence de Spring.

Il n’y a pas de vraie différence. C’est la façon dont vous préférez configurer votre système, et c’est une question de choix personnel. Pour ma part, je préfère utiliser les annotations @PostConstruct pour mon propre code (car le bean est correctement configuré après l’appel de la méthode) et j’utilise la init-method lors de l’instanciation de beans dans des bibliothèques non compatibles Spring (impossible d’y appliquer des annotations , bien sûr!) mais je peux totalement comprendre les gens qui veulent tout faire d’une manière ou d’une autre.

@postconstruct ne fait pas partie du spring. Cela fait partie du paquetage javax. Les deux sont les mêmes. en utilisant la méthode init, nous devons append le fichier xml. Si vous utilisez @postconstruct, l’ajout de xml n’est pas requirejs. Consultez l’article ci-dessous.

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

Code complet ici: https://github.com/wkaczurba/so8519187 ( boot-print )

Utiliser des annotations:

 @Slf4j @Component public class MyComponent implements InitializingBean { @Value("${mycomponent.value:Magic}") public Ssortingng 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 } } 

Nous obtient:

Rafraîchissant org.springframework.context …

MyComponent dans constructeur: [null]
MyComponent in postConstruct: [Magic]
MyComponent dans afterPropertiesSet: [Magic]

Enregistrement de beans pour une exposition JMX au démarrage
DemoApplication a démarré en 0.561 secondes (JVM tournant à 1.011)
Closing org.springframework.context … Désinscription des beans exposés à JMX à l’arrêt


MyComponent in preDestroy: [Magic]