如果一个bean由Spring管理,这意味着还必须管理所有创建的bean

时间:2014-06-05 14:19:26

标签: java spring

如果我有一个包含另一个非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吗?这背后的原因是什么?

1 个答案:

答案 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的局部变量(与类中的字段完全不同),其中实例化由程序员决定。