請您列出getBean
的所有可能的來源?Spring getBean方法返回的bean來自哪裏?
順便說一句,如果我只寫context.getBean(SomeInterface.class)
,我可以得到接口類的實現嗎?
請您列出getBean
的所有可能的來源?Spring getBean方法返回的bean來自哪裏?
順便說一句,如果我只寫context.getBean(SomeInterface.class)
,我可以得到接口類的實現嗎?
它們來自Spring應用程序上下文(這就是您所稱的getBean
方法)。
Spring有這樣一個應用程序上下文的概念,它是一個包含諸如Spring管理的所有bean的對象。
您可以通過在Spring XML配置文件配置它們,或用註釋,比如@Component
,@Service
等,然後讓春天由掃描包這些類的找到他們註解類把豆在應用程序上下文。
如果你編寫context.getBean(SomeInterface.class)
並且有一個實現該接口的Spring bean,那麼該方法調用將返回實現該接口的bean。
這些是Spring框架的基本概念。請參閱Spring文檔中的chapter 5, The IoC Container,以獲取有關其工作原理的詳細說明。
如果進入ApplicationContext類層次結構,您會發現所有Spring Application Context文件都是org.springframework.core.io.DefaultResourceLoader類的子類。
DefaultResourceLoader所做的是獲取當前線程上下文類加載器(如果沒有提供)。所以我們可以理解,所有的應用程序上下文文件都會先載入定義的類Application Context加載在xml文件中定義的所有bean,使用@Bean註釋或其他可用的Spring註釋標記。一旦上下文掃描了註釋和/或xml並加載了類加載器中的所有bean。上下文首先創建依賴關係並注入它們。
要獲取context.getBean(SomeInterface.class),請參考下面的文檔。
按我的文檔的瞭解,如果你一個確切的實現bean類的定義,必須經豆。