Синглтон-бин несколько раз создавался в Spring MVC? - PullRequest
0 голосов
/ 09 февраля 2012

Кто-нибудь знает, почему этот бин создается несколько раз? Мне нужен только один его экземпляр, но каждый раз, когда запускается контроллер, конструктор снова вызывается.

Вот определение в моем приложенииContext.xml

<bean id="DiameterClient" class="com.rory.diameter.client.DiameterClient" scope="singleton" init-method="start">
    <constructor-arg type="java.lang.String" index="0"><value>${pcca.host}</value></constructor-arg>      
    <constructor-arg index="1"><value>${pcca.port}</value></constructor-arg>      
    <constructor-arg index="2" value="com.openwave.djgx.message"/>
    <constructor-arg index="3" value="com.openwave.djgx.avp"/>    
</bean>

И в моем контроллере я использую его здесь - хотя я получаю только один экземпляр класса DiameterClient, но он вызывает его конструктор каждый раз, когда запускается приведенный ниже код - любая помощь очень ценится: *

BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
DiameterClient diameterClient = (DiameterClient)factory.getBean("DiameterClient");
diameterClient.send(aar);

Обратите внимание, DiameterClient - это не мой класс, и я не хочу его редактировать, просто хочу иметь один глобальный экземпляр для каждого приложения. Обратите внимание, что DiameterClient расширяет поток - не уверен, имеет ли это значение.

1 Ответ

7 голосов
/ 09 февраля 2012

Каждый раз вы создаете новый контекст и область действия. singleton означает, что в контексте есть один экземпляр.Обычно вам нужен один контекст для выполнения приложения.Переместите часть ниже в место, выполненное один раз в вашей заявке:

BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
...