簡體   English   中英

@lazy和@Scope(“ prototype”)在Spring中有什么區別

[英]What is the difference between @lazy and @Scope(“prototype”) in Spring

基於我在網上資源中所讀到的內容,@ lazy和scope原型均按需創建bean,這與默認作用域(單例)不同。 那么什么時候適合使用@lazy代替原型,反之亦然或在定義類時一起使用呢?

提前致謝。

@Lazy不是作用域。 要回答您的問題,您首先需要了解范圍和實例化之間的關系。

每個容器一次創建單例(默認作用域)(例如,在啟動Webapp時)。 每次注入創建一次原型(每次類獲得bean時)。

@Lazy告訴Spring不要急於創建bean。 對於單例,這意味着將不會在啟動時創建它,而是將在首次注入時對其進行構造。 它對原型沒有任何影響,因為只有在已經注入它們之后才能創建它們。

總之,@ Lazy僅適用於單例。 如果所說的惰性單例是由非惰性單例(在啟動時創建的)注入的,則@Lazy不會有效執行任何操作。

注意:@Lazy也會影響其他范圍,例如請求,會話等。您可能正在使用這些的代理,從技術上來說,它將控制實際的范圍/惰性。

有關作用域的更多信息,請參見Spring的文檔:

http://docs.spring.io/spring/docs/3.0.0.M3/reference/html/ch04s04.html

惰性:僅在引用時初始化Bean,然后可以重用。

原型:每次使用bean都會得到一個新實例。

因此,懶惰較少占用資源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM