簡體   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