java - 获取 spring bean 的新实例

标签 java spring inversion-of-control

我有一个名为 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/

相关文章:

java - 带有静态库的 JNI : unsatisfied link error

java - 如何结合.java和html?

java - Spring 数据 jpa,jparepository 返回字符串列表代替 DTO 对象

c# - "share"/resolve (ServiceStack) Service within (ServiceStack) Service 是个坏主意吗?

c# - .net 的控制反转

java - Java EE 项目中的错误

Java 类型转换和作用域

Spring 启动: Secured RESTful API using Spring Social and Spring Security

java - 将 ElasticSearch 与 Spring Data 结合使用时自动生成数字 id

asp.net-mvc - Ninject.MVC3,将 DependencyResolver 传递给服务层?