我的印象是否正确,通过使用常规new XYZ()
方式实例化某个组件,XYZ会阻止Spring处理XYZ中的@Autowired
字段?
第二个问题:我不能在XYZ中使用依赖注入,同时在XYZ中使用最终字段是正确的吗?例如:
@Component
public class XYZ {
@Autowired
private SomeDep dep;
private final int value;
public XYZ(int value) {
this.value = value;
}
}
我该如何工作?
所以,好吧,接受没有更好的方法,让我们这样做:
@Component
public class XYZ {
@Autowired
private SomeDep dep;
private final int value;
// factory instantiation
XYZ() {
value=0;
}
private XYZ(SomeDep dep, int value) {
this.dep = dep;
this.value = value;
}
public XYZ getInstance(int value) {
return new XYZ(dep, value);
}
}
???那很难看。当我想将依赖声明移动到父类时,它变得更加丑陋....... ???我一直认为DI很好。我想我必须重新考虑一下。有哪些替代方案?我错过了什么吗?
答案 0 :(得分:1)
new
创建对象,则@Autowired将无效,因为此对象是在Spring IoC container之外创建的。所以这个对象应该由spring实例化,以便让它注入依赖关系。要从容器(spring应用程序上下文)获取此对象(bean),您应该initialize Spring context并调用context.getBean("beanName")
。