我有一个名为 MyInterface
的界面。实现 MyInterface
的类(我们称之为 MyImplClass
)也实现了 Runnable
接口(interface),因此我可以使用它来实例化线程。这是我的代码。
for (OtherClass obj : someList) {
MyInterface myInter = new MyImplClass(obj);
Thread t = new Thread(myInter);
t.start();
}
我想做的是在我的 ApplicationContext.xml 中声明实现类,并为每次迭代获取一个新实例。所以我的代码看起来像这样:
for (OtherClass obj : someList) {
MyInterface myInter = // getting the implementation from elsewhere
Thread t = new Thread(myInter);
t.start();
}
如果可能,我仍想保留 IoC 模式。
我该怎么做?
谢谢
最佳答案
您可以像下面这样使用 spring 作用域原型(prototype)尝试工厂模式。定义一个抽象工厂类,它将为您提供 MyInterface
对象
public abstract class MyInterfaceFactoryImpl implements MyInterfaceFactory {
@Override
public abstract MyInterface getMyInterface();
}
然后如下定义Spring bean.xml文件。请注意 myinterface
bean 被定义为原型(prototype)(因此它将始终为您提供新实例)。
<bean name="myinterface" class="com.xxx.MyInterfaceImpl" scope="prototype"/>
然后用工厂方法名定义factorybean。
<bean name="myinterfaceFactory" class="com.xxx.MyInterfaceFactoryImpl">
<lookup-method bean="myinterface" name="getMyInterface" />
</bean>
现在您可以调用myinterfaceFactory
来获取新的实例。
for (OtherClass obj : someList) {
MyInterface myInter = myInterfaceFactory.getMyInterface();
Thread t = new Thread(myInter);
t.start();
}
关于java - 获取 spring bean 的新实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29495353/