我有一个基类textField
和多个继承自它的类。
直到现在我只需要其中一个
所以我刚做了:
let action = UIAlertAction(title: "ENTER", style: .default) { _ in
if let textField = alert.textFields?[0] {
self.teamNameLabel.text = textField.text!
}
}
但是情况已经变了,我想生成每种类型的多个对象(即Foo
的{{1}}实例,@Autowired
private List<Foo> foos;
的{{1}}实例等)>
如何使用Spring Boot做到这一点?
注意:我并不是真的需要将其填充到列表中。
编辑:
我将进一步解释我面临的问题。每个类代表一种任务(它是x
)。每个任务都有固定数量的线程。我想为每个线程实例化一个新对象。
所以我的问题是:如何利用Spring来实现这一目标?返回时,当我只需要一个实例来完成每个任务时,这很容易(请参见Foo1
示例)
答案 0 :(得分:3)
如果我正确理解了您的问题,则需要一个bean的多个实例,则需要将该bean的范围声明为PROTOTYPE,因为默认情况下spring使它们成为SINGLETON(每个容器一个bean)。要使您的bean成为PROTOTYPE,只需要将此注释@Scope("prototype")
添加到类中即可。
这里有一些深入的参考:https://docs.spring.io/spring/docs/3.0.0.M3/reference/html/ch04s04.html
HTH
答案 1 :(得分:2)
我提出了一个解决方案,其中包括一些工作,但在大多数情况下更干净。
它使用了一个工厂,该工厂拥有Foo
的所有依赖关系,我们使Foo
不再是spring bean。因此,我们不依赖Spring实例化n
的{{1}}实例,而是可以通过编程方式确定要创建多少个实例。
这当然有一些优点和缺点:
Foo
实例。 (可以通过属性设置,可以计算,可以注入...)这将用于创建您的n
类型的实例:
n
必须对要构造的每种类型都执行此操作。此外,每个创建的实现都必须声明为Spring Bean:
interface Factory<T> {
T create();
}
这是在我们要创建// Our object we want to create
class Foo {
private final Dependency1 d1;
private final Dependency2 d2;
public Foo(Dependency1 d1, Dependency2 d2){
this.d1 = d1;
this.d2 = d2;
}
// methods of foo
}
// our factory for the object
@Component
class FooFactory implements Factory<Foo>{
private final Dependency1 d1;
private final Dependency2 d2;
@Autowired
public FooFactory(Dependency1 d1, Dependency2 d2){
this.d1 = d1;
this.d2 = d2;
}
@Override
public Foo create(){
return new Foo(d1, d2);
}
}
的{{1}}实例的服务中完成的:
n