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 @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