Printemps singleton être appelé deux fois
l'obtention de certains problème dans mon printemps application.
J'ai assez simple beans spring, elles sont injectées dans divers autres beans spring. Lors du débogage, j'ai trouvé, ils sont appelés à deux reprises, Constructeur & @PostConstruct fois appelé deux fois.
Ma demande n'avons pas avant la fin de la technologie. Son tout simplement pour le backend de tâches connexes.
Configuration Spring
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:lang="http://www.springframework.org/schema/lang" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd">
<context:component-scan base-package="com.green.integration" />
<!-- ######################################################## -->
<!-- EXPOSING SPRING BEAN VIA HTTPINVOKER SPRING REMOTING -->
<!-- ######################################################## -->
<bean name="/switch"
class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
<property name="service" ref="SwitchController" />
<property name="serviceInterface"
value="com.green.ISwitchController" />
</bean>
<!-- Load in application properties reference -->
<bean id="applicationProperties"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:application.properties" />
</bean>
<bean id="mongo" class="com.mongodb.Mongo">
<constructor-arg value="${mongo.server}" />
<constructor-arg value="${mongo.port}" />
</bean>
<bean id="morphia" class="com.google.code.morphia.Morphia">
</bean>
</beans>
Printemps Bean Classe
@Repository
public class TransactionDAO extends BasicDAO<Transaction, ObjectId> {
private Datastore datastore;
@Autowired
public TransactionDAO(Mongo mongo, Morphia morphia) {
super(mongo, morphia, "itransact");
morphia.map(Transaction.class);
//TO USE MONGO WITHOUT SECURITY
this.datastore = morphia.createDatastore(mongo, "itransact");
logger.debug("***** CONNECTED TO MONGODB SUCCESSFULLY *****");
this.datastore.ensureIndexes();
//this.datastore.ensureCaps();
}
}
Constructeur "TransactionDAO" est appelé deux fois.
J'ai essayé de regarder la trace de pile d'appel par
Throwable t = new Throwable();
System.out.println(t.getStackTrace()[1].toString());
et à chaque fois il a montré la suite de
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
Êtes-vous absolument sûr
Avez-vous un répartiteur de servlet de configuration?
Peut-être que vous avez votre contexte de l'application xml importé à partir d'un autre contexte xml du fichier de configuration via <import ..>?
Votre configuration spring ne comprend pas la classe DAO que vous avez énumérés. Il manque de l'information ici.
Ouais, j'ai un répartiteur de servlet pour le printemps httpinvoker. Est-ce l'origine du problème?
@PostConstruct
est appelé deux fois? Constructeur appelé deux fois peut être facilement expliqué, mais pas @PostConstruct
.Avez-vous un répartiteur de servlet de configuration?
Peut-être que vous avez votre contexte de l'application xml importé à partir d'un autre contexte xml du fichier de configuration via <import ..>?
Votre configuration spring ne comprend pas la classe DAO que vous avez énumérés. Il manque de l'information ici.
Ouais, j'ai un répartiteur de servlet pour le printemps httpinvoker. Est-ce l'origine du problème?
OriginalL'auteur Faisal Basra | 2012-05-28
Vous devez vous connecter pour publier un commentaire.
Je viens de comprendre le problème et un merci spécial à @Juan Alberto qui me donner des astuce pour le problème.
Description: en Fait, j'ai donné une applicationContext.xml dossier pour les deux contextListner et répartiteur de la servlet. Donc 1er bean a été initialisation pour le printemps de base et le 2e temps pour le printemps répartiteur.
J'ai versé la configuration maintenant, dans applicationContext.xml et applicationContext-dispatcher.xml qui n'ont plus que leurs configurations et mes haricots sont en cours d'initialisation une fois correctement.
Problématique Configs
Résolu Configs
applicationContext-dispatcher.xml
et ce qui devrait être mis enapplicationContext.xml
OriginalL'auteur Faisal Basra
En fait votre problème est que vous avez peut-être définir les haricots dans le répartiteur de servlet et aussi de votre ressort contexte, l'opérateur fournit un contexte différent, mais C' (un sous-contexte, je pense) de la principale contexte, de sorte que la bonne façon de faire les choses est d'avoir votre principale contexte de numérisation de votre "modèle de classes" et le répartiteur juste qu'il analyse uniquement pour les contrôleurs.
J'espère que cela vous aide.
OriginalL'auteur Juan Alberto López Cavallotti