Question

J'ai un cas d'utilisation où je dois appeler une méthode (non statique) dans le haricot une fois seulement à la charge jusqu'à ApplicationContext. Est-il ok, si j'utilise MethodInvokingFactoryBean pour cela? Ou nous avons une solution un peu mieux?

Comme une note de côté, j'utilise ConfigContextLoaderListener pour charger le contexte d'application dans l'application web. Et que vous voulez, que si le haricot « A » est instancié il suffit d'appeler methodA () une fois.

Comment cela peut-il être fait bien?

Était-ce utile?

La solution

Vous pouvez utiliser quelque chose comme:

<beans>
    <bean id="myBean" class="..." init-method="init"/>
</beans>

appellera la méthode « init » lorsque le grain est instancié.

Autres conseils

Pour développer la suggestion @PostConstruct dans d'autres réponses, ce qui est vraiment la meilleure solution, à mon avis.

  • Il maintient votre code découplée de l'API Spring (@PostConstruct est javax. *)
  • Il annote explicitement votre méthode init comme quelque chose qui doit être appelée pour initialiser le grain
  • Vous ne devez pas oublier d'ajouter l'attribut méthode init à votre définition de haricot de printemps, le printemps appellera automatiquement la méthode (en supposant que vous enregistrez l'option config d'annotation ailleurs dans le contexte, de toute façon).

Il y a à considérer trois approches différentes, comme décrit dans la section référence

Utilisation attribut de méthode init

Plus:

  • Ne nécessite pas de haricots pour implémenter une interface.

Moins:

  • Aucune indication immédiate de cette méthode est nécessaire après la construction pour assurer le grain est correctement configuré.

Mettre en œuvre InitializingBean

Plus:

  • Pas besoin de spécifier méthode init, ou activer le traitement balayage / annotation composant.
  • approprié pour les haricots fournis avec une bibliothèque, où nous ne voulons pas l'application en utilisant cette bibliothèque à se préoccuper du cycle de vie de haricots.

Moins:

  • Plus invasive que l'approche méthode init.

Utilisez JSR-250 @ PostConstruct annotation Lifecyle

Plus:

  • Utile lors de numérisations des composants pour détecter automatiquement les haricots.
  • il est clair qu'une méthode spécifique doit être utilisé pour l'initialisation. L'intention est plus proche du code.

Moins:

  • Initialiser plus centralisée spécifié dans la configuration.
  • Vous devez penser à activer le traitement d'annotation (qui peut parfois être oublié)

Avez-vous essayé de mettre en œuvre

Vous pouvez déployer une coutume BeanPostProcessor dans votre contexte d'application pour le faire. Ou si vous ne dérange pas la mise en œuvre d'une interface de printemps dans votre haricot, vous pouvez utiliser le initializingBean interface ou la "directive init-méthode"(même lien).

Pour plus effacer toute confusion sur les deux l'utilisation de l'approche de i.e. de

  1. @PostConstruct et
  2. init-method="init"

Par expérience personnelle, je me suis aperçu que l'utilisation (1) ne fonctionne que dans un conteneur de servlet, tandis que (2) fonctionne dans tout environnement, même dans les applications de bureau. Donc, si vous voulez utiliser Spring dans une application autonome, vous devez utiliser (2) pour mener à bien que « cette méthode est appelée après l'initialisation.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top