Singleton bean在Spring MVC中多次实例化?

时间:2012-02-09 13:14:08

标签: java spring spring-mvc singleton web.xml

有谁知道为什么这个bean多次被实例化?我只想要它的一个实例,但每次控制器运行时,都会再次调用构造函数。

这是我的applicationContext.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扩展了Thread - 不确定这是否重要。

1 个答案:

答案 0 :(得分:7)

您每次创建一个新的上下文,范围singleton表示上下文中有一个实例。通常每个应用程序执行需要一个上下文。将下面的部分移动到应用程序中执行一次的位置:

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