有谁知道为什么这个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 - 不确定这是否重要。
答案 0 :(得分:7)
您每次创建一个新的上下文,范围singleton
表示上下文中有一个实例。通常每个应用程序执行需要一个上下文。将下面的部分移动到应用程序中执行一次的位置:
BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");