繁体   English   中英

如果一个bean由Spring管理,是否意味着所有创建的bean也必须被管理

[英]If one bean is managed by Spring does this mean all created beans also have to be managed

如果我有一个包含另一个非Spring bean的Spring bean,如下所示:

@Component
class SpringBean {

  private MyBean mb = new MyBean();
}

我收到错误消息:无法连线MyBean

但是,如果我在方法中声明Bean:

@Component
class SpringBean {

  private void myMethod(){
    MyBean mb = new MyBean();
  }
}

然后在调用bean时正确初始化了bean。

那么Spring是否不允许Spring bean创建非Spring bean? 这背后的原因是什么?

Spring将仅管理由Spring容器创建的bean,并提供依赖项注入以及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类型的局部变量(与类中的字段完全不同),实例化由程序员决定。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM