Pourquoi est mon de Printemps ContextRefreshed événement appelé deux fois?
J'ai un Printemps ApplicationListener bean enregistré pour écouter ContextRefreshed événements. Pour une raison étrange, bien que, je reçois deux appels à la onApplicationEvent(ContextRefreshedEvent)
méthode à la fin de l'initialisation du contexte. Est-ce un comportement normal ou est-ce une indication d'un problème avec ma configuration? Je suis l'aide de la Jetée de 8 pour mon conteneur de Servlet.
Mon pertinentes web.xml la configuration est comme suit
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/config/spring/spring-config.xml</param-value>
</context-param>
<servlet>
<servlet-name>Spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value></param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet-mapping>
<servlet-name>Spring</servlet-name>
<url-pattern>/service/*</url-pattern>
</servlet-mapping>
Merci!
OriginalL'auteur Andre | 2011-05-28
Vous devez vous connecter pour publier un commentaire.
Même si vous n'avez pas spécifié un contextConfigLocation pour votre DispatcherServlet il crée tout de même un enfant en contexte et la deuxième actualisation de l'événement est pour ce contexte. L'utilisation de l'événement.getcontexteapplication() pour trouver le contexte de l'événement.
id
oudisplayName
propriété de l'ApplicationContext je peux maintenant faire la distinction entre les deux événements.Ou si vous @Autowire la appContext (ou de mettre en œuvre ApplicationContextAware), vous pouvez comparer que appContext par rapport à celle de l'événement.
Une question de noob: Comment accéder à l'ID ou le nom d'affichage de ContextRefreshedEvent?
Pensé à elle. Par casting ContextRefreshedEvent.getSource() pour ApplicationContext et puis l'appel de getDisplayName()/getId ().
génial!! appris une leçon!!
OriginalL'auteur sourcedelica
il m'est arrivé aussi, sur un autre écouteur d'événement. (
ApplicationListener<AuthenticationFailureBadCredentialsEvent>
)J'ai soupçonné l' ContextLoaderListener, et quand j'ai enlevé la déclaration de la web.xml l'application a été fonctionne correctement. Ensuite, j'ai eu de comprendre quel est son but, de la ContextLoaderListener...
Rôle/Objet de ContextLoaderListener au Printemps?
la réponse intéressante:
OriginalL'auteur OhadR
Il ressemble à un bug.
https://jira.springsource.org/browse/SPR-6589
Si vous utilisez 3.0 essayer sur la dernière version qui est de 3,05.
Bah, mis à niveau vers 3.0.5 et c'est toujours un problème.
Même 3.1 a le même problème.
OriginalL'auteur danny.lesnik
J'ai eu ce problème aussi, mais il fixe. J'ai été l'injection de la source de données dans mon DAO (et l'instanciation d'un JdbcTemplate avec elle)....mais j'ai aussi eu un Printemps bean configuré pour JDBCTemplate.
J'aurais été de l'injection de mon DAO avec le jdbcTemplate...qui évite les doublons.
OriginalL'auteur Kev