我有一個帶有自動掃描和@Component註釋的Spring項目。某些組件需要使用@Autowired注入不同的bean。默認情況下它是否與單例創建的組件bean相同?如果是這樣,我怎樣才能將不同的組件的不同實例注入到不同的bean中?Spring @Component @Autowired
P.S.我知道它接近基礎,聽起來很一般。只是想爲自己說清楚。
在此先感謝
我有一個帶有自動掃描和@Component註釋的Spring項目。某些組件需要使用@Autowired注入不同的bean。默認情況下它是否與單例創建的組件bean相同?如果是這樣,我怎樣才能將不同的組件的不同實例注入到不同的bean中?Spring @Component @Autowired
P.S.我知道它接近基礎,聽起來很一般。只是想爲自己說清楚。
在此先感謝
默認情況下一個春天的範圍管理bean是singleton
(只創建一個實例),如果你想許多情況下,將其定義爲prototype
。
使用以下注釋:
@Scope("prototype")
這裏有一個很好的完整的例子:
當你創建一個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/
閱讀有關範圍原型https://www.tutorialspoint.com/spring/spring_bean_scopes.htm – Jens