【发布时间】:2018-01-24 09:04:13
【问题描述】:
我有一个 java 接口,说 ITest 由两个类 Class1 和 Class2 实现。现在我有一个工厂类,我用它来决定返回哪个实现。喜欢
if(something)
return new Class1()
else
return new Class2()
问题是我在 Class1 中有自动装配字段,它没有被实例化,但是相同的自动装配在通过自动装配实例化的其他类中工作。
这是 Class1 的代码
@Componene
public Class1 implements ITest{
@Autowired
private SomeClass obj;
}
不知道如何解决这个问题。由于 SomeClass 的自动装配在其他类中工作正常。
【问题讨论】:
-
如果你自己实例化它们,你不能自动装配对象
-
我该如何解决这个问题?我的工厂类需要根据特定条件返回实例。所以我必须手动实例化
-
您可以做的是,在您的 Spring 配置中,创建与您不同的
Classes相对应的@Bean,您将通过 setter 或构造函数在其中注入SomeClass对象。这样,您不会在工厂中制造新产品,而是在工厂中自动连接您的Classes。不过,我有点不鼓励这样做,因为这不是干净的代码。 -
使用 spring 时做
new是犯罪行为:)。说了这么多,试试Prototypebean