262 votes

Printemps - comment appeler une méthode après initialisation de la fève est complet ?

J’ai un cas d’utilisation où j’ai besoin d’appeler une méthode (non statique) dans la fève seule-fois à la charge de ApplicationContext vers le haut. Est-ce OK, si j’utilise MethodInvokingFactoryBean pour cela ? Ou nous avons des meilleure solution ?

Comme note latérale, j’utilise ConfigContextLoaderListener pour charger le contexte de l’Application dans l’application web. Et faute, que si les haricots « A » est instancié juste appelez methodA() immédiatement.

Comment est-ce possible bien ?

341voto

skaffman Points 197885

Afin d'étendre l' @PostConstruct suggestion dans d'autres réponses, c'est vraiment la meilleure solution, à mon avis.

  • Il maintient votre code découplé de la source de l'API (@PostConstruct est dans javax.*)
  • Il explicitement annote votre méthode init comme quelque chose qui doit être appelée pour initialiser le haricot
  • Votre classe peut avoir autant d' @PostConstruct et @PreDestroy annotée méthodes que vous le souhaitez.
  • Vous n'avez pas besoin de n'oubliez pas d'ajouter l'initialisation de l'attribut method de votre ressort de haricots définition, le printemps sera automatiquement appel à la méthode (en supposant que vous vous inscrivez à l'annotation-config option quelque part d'autre dans le contexte, de toute façon).

208voto

Mercer Traieste Points 2935

Vous pouvez utiliser quelque chose comme :

Cela appellera la méthode « init » lorsque la fève est instanciée.

110voto

toolkit Points 27248

Trois approches différentes de considérer comme décrit dans la référence

(1) l'Utilisation d'initialisation de l'attribut de méthode.

Pros - ne nécessite pas de haricots pour implémenter une interface.

(2) Mettre En Œuvre InitializingBean.

Inconvénients - plus envahissantes que l'initialisation de l'approche de la méthode.

(3) l'Utilisation de la JSR-250 @PostConstruct lifecyle annotation.

Pour:

Utile lors de l'utilisation de composant de balayage pour détecter automatiquement les haricots.

Il est clair qu'une méthode spécifique doit être utilisé pour l'initialisation

Inconvénients:

L'Initialisation n'est plus centralisée spécifié dans la configuration. Maintenant dispersés dans tout le code.

42voto

Jon Skeet Points 692016

Avez-vous essayé de mettre en œuvre `` ? C’est exactement ce que vous êtes après.

L’inconvénient est que votre haricot devienne printemps-conscient, mais dans la plupart des applications ce n’est pas si mal.

8voto

Rob H Points 5599

Vous pourriez déployer une coutume BeanPostProcessor dans votre contexte de l'application pour le faire. Ou si vous n'avez pas l'esprit de la mise en œuvre d'un Printemps de l'interface dans votre bean, vous pouvez utiliser le InitializingBean de l'interface ou de la "initialisation de la méthode de la" directive (même lien).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X