2017-03-16 108 views
1

我有一個帶有自動掃描和@Component註釋的Spring項目。某些組件需要使用@Autowired注入不同的bean。默認情況下它是否與單例創建的組件bean相同?如果是這樣,我怎樣才能將不同的組件的不同實例注入到不同的bean中?Spring @Component @Autowired

P.S.我知道它接近基礎,聽起來很一般。只是想爲自己說清楚。

在此先感謝

+1

閱讀有關範圍原型https://www.tutorialspoint.com/spring/spring_bean_scopes.htm – Jens

回答

2

當你創建一個bean定義,創建定義爲創建類的實際實例配方通過這個bean的定義。 bean定義是一個配方的想法很重要,因爲它意味着,就像一個類一樣,您可以從一個配方創建許多對象實例。

不僅可以控制要插入從特定的bean定義創建的對象中的各種依賴項和配置值,還可以控制從特定的bean定義創建的對象的範圍。這種方法功能強大且靈活,因爲您可以選擇通過配置創建的對象的範圍,而不必在Java類級別上烘焙對象的範圍。 Bean可以被定義爲部署在多個作用域中的一個:開箱即用,Spring框架支持七個作用域,其中五個作用域只有在使用Web感知的ApplicationContext時纔可用。

開箱即用支持以下範圍。您也可以創建自定義範圍。

Singleton (默認)每個Spring IoC容器將單個bean定義作用於單個對象實例。

原型 將單個bean的定義作用於任意數量的對象實例。

請求 作用域單個bean定義到單個HTTP請求的生命週期;也就是說,每個HTTP請求都有自己的實例,這個實例是在單個bean定義的背後創建的。只有在Web感知的Spring ApplicationContext的上下文中才有效。

會話 範圍HTTP會話生命週期的單個bean定義。只有在Web感知的Spring ApplicationContext的上下文中才有效。

GlobalSession 將全局HTTP會話的生命週期的單個bean定義作用域。通常僅在Portlet上下文中使用時纔有效。只有在Web感知的Spring ApplicationContext的上下文中才有效。

應用程序 作用域ServletContext生命週期的單個bean定義。只有在Web感知的Spring ApplicationContext的上下文中才有效。

Websocket 範圍一個單一的bean定義到WebSocket的生命週期。只有在Web感知的Spring ApplicationContext的上下文中才有效。

欲瞭解更多信息,請訪問:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/