如果我有一个包含另一个非Spring bean的Spring bean,那么:
@Component
class SpringBean {
private MyBean mb = new MyBean();
}
我收到错误:无法连接bean MyBean
但是如果我在方法中声明Bean:
@Component
class SpringBean {
private void myMethod(){
MyBean mb = new MyBean();
}
}
然后在调用bean时正确初始化bean。
Spring不允许Spring bean创建非Spring bean吗?这背后的原因是什么?
答案 0 :(得分:2)
只有Spring容器创建的bean将由Spring管理,并提供依赖注入以及Spring为您提供的所有好处(和问题)。
Spring不允许Spring bean创建非Spring bean吗?
Spring bean毕竟是POJO,因此可以像使用公共构造函数的任何类一样手动创建它们。这意味着,你可以这样做:
public void foo() {
SpringBean springBeanNotManagedBySpring = new SpringBean();
//use springBeanNotManagedBySpring...
}
但是,正如我在回答的开头所述,springBeanNotManagedBySpring
不是由Spring管理的,因此它不会受到Spring托管bean的好处。
请注意,您在示例中执行了两项不同的操作:
MyBean
的类中有一个字段,Spring尝试注入它,但看起来没有找到要注入的Spring bean。您应该发布bean的配置,以便我们对此进行更好的分析。MyBean
的局部变量(与类中的字段完全不同),其中实例化由程序员决定。