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.
@PostConstruct
est une annotation JSR-250, alors que la init-method
est la init-method
Spring pour l’initialisation. @PostConstruct
, celle-ci sera appelée en premier avant l’appel des méthodes d’initialisation. 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.
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]