Je convertis un contrôleur vers la nouvelle version d'annotation. Dans l'ancienne version, j'avais l'habitude de spécifier la méthode init dans springmvc-servlet.xml en utilisant:
<beans>
<bean id="myBean" class="..." init-method="init"/>
</beans>
Comment puis-je spécifier la méthode init à l'aide de la version d'annotation?
java
spring
annotations
controller
Krt_Malta
la source
la source
Réponses:
Vous pouvez utiliser
la source
Vous pouvez également demander à votre classe d'implémenter l'
InitializingBean
interface pour fournir une fonction de rappel (afterPropertiesSet()
) que ApplicationContext appellera lorsque le bean est construit.la source
Il existe plusieurs façons d'intercepter le processus d'initialisation dans Spring. Si vous devez initialiser tous les beans et les autowire / injecter, il y a au moins deux façons que je connaisse qui assureront cela. Je n'ai testé que le second mais je pense que les deux fonctionnent de la même manière.
Si vous utilisez @Bean, vous pouvez référencer par initMethod, comme ceci.
Si vous utilisez @Component, vous pouvez annoter avec @EventListener comme ceci.
Dans mon cas, j'ai un système hérité dans lequel j'utilise maintenant IoC / DI où Spring Boot est le framework choisi. L'ancien système apporte de nombreuses dépendances circulaires à la table et je dois donc beaucoup utiliser la dépendance setter. Cela m'a donné des maux de tête car je ne pouvais pas faire confiance à @PostConstruct car l'autowiring / injection par setter n'était pas encore fait. L'ordre est constructeur, @PostConstruct puis setters autowired. Je l'ai résolu avec l'annotation @EventListener qui s'exécutera en dernier et en "même" temps pour tous les beans. L'exemple montre également l'implémentation d'InitializingBean.
J'ai deux classes (@Component) avec une dépendance l'une à l'autre. Les classes ont la même apparence dans le cadre de cet exemple en affichant une seule d'entre elles.
Il s'agit de la sortie du journal montrant l'ordre des appels lorsque le conteneur démarre.
Comme vous pouvez le voir, @EventListener est exécuté en dernier une fois que tout est prêt et configuré.
la source
la source