J'ai un cas d'utilisation où j'ai besoin d'appeler une méthode (non statique) dans le bean une seule fois lors du chargement d'ApplicationContext. Est-ce correct si j'utilise MethodInvokingFactoryBean pour cela? Ou nous avons une meilleure solution?
En remarque, j'utilise ConfigContextLoaderListener pour charger le contexte d'application dans l'application Web. Et que si le bean 'A' est instancié, il suffit d'appeler methodA () une fois.
Comment cela peut-il être bien fait?
Pour développer la suggestion @PostConstruct dans d'autres réponses, c'est vraiment la meilleure solution, à mon avis.
la source
<context:component-scan>
fonctionne également et peut être utile pour réduire le temps de démarrage si vous avez de grandes bibliothèques non Spring sur votre chemin de classe.Il y a trois approches différentes à considérer, comme décrit dans la référence
Utiliser l'attribut init-method
Avantages:
Les inconvénients:
Implémenter InitializingBean
Avantages:
Les inconvénients:
Utiliser l' annotation de style de vie JSR-250 @PostConstruct
Avantages:
Les inconvénients:
la source
@PostConstruct
précisément parce qu'il fait partie de la classe qu'il a besoin de la méthode appelant à la fin du traitement d'initialisation.Avez-vous essayé d'implémenter
InitializingBean
? Cela ressemble exactement à ce que vous recherchez.L'inconvénient est que votre bean devient compatible avec Spring, mais dans la plupart des applications, ce n'est pas si mal.
la source
Vous pouvez déployer un BeanPostProcessor personnalisé dans votre contexte d'application pour le faire. Ou si cela ne vous dérange pas d'implémenter une interface Spring dans votre bean, vous pouvez utiliser l' interface InitializingBean ou la directive "init-method" (même lien).
la source
Pour clarifier davantage toute confusion concernant les deux approches, à savoir
@PostConstruct
etinit-method="init"
Par expérience personnelle, j'ai réalisé que l'utilisation de (1) ne fonctionne que dans un conteneur de servlet, tandis que (2) fonctionne dans n'importe quel environnement, même dans les applications de bureau. Donc, si vous utilisez Spring dans une application autonome, vous devez utiliser (2) pour exécuter cet "appel de cette méthode après l'initialisation.
la source
@PostConstruct
(lorsqu'il est utilisé dans une application Spring) est lié à la durée de vie du contexte Spring propriétaire. Ces contextes peuvent être utilisés dans toutes sortes d'applications.