0

我見過的定義如下代碼:是否有任何理由來代理一個單身bean?

@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS) 
@Component 
public class SomeComponent { 
    <...> 
} 

這是一個單獨的作用域bean。在我看來,沒有理由去代理它。據我所知,我們應該代理一個bean的情況下,如果它的範圍不是單例,並且不同於另一個bean的範圍,我們將注入它的範圍。

也許我不知道什麼。什麼可能是代理一個單身人士的理由?

回答

0

調查後,我發現我的問題的答案在an outdated Spring's documentation

你並不需要結合與和作用域爲singleton或prototype的bean使用<aop:scoped-proxy/>。嘗試爲單例bean創建一個限定範圍的代理是錯誤的(並且由此產生的BeanCreationException在這方面肯定會讓你直觀)。

它回答我的問題,因爲<aop:scoped-proxy/>@Scope註釋的替代品。但是current documentation不同於舊:

您也可以使用<aop:scoped-proxy/>被作用域爲單豆之間,則參考通過中間代理是序列化的,因此能夠重新獲得目標單豆去關於反序列化。

這意味着,現在你不會看到BeanCreationException萬一你會嘗試定義一個單例作用域代理。但無論如何,我不完全理解這個模糊用例的目的。所以,如果任何人明白這句話的意思,請在評論中澄清。

結論:在大多數情況下,沒有理由代理一個單例作用域bean。

0

關於範圍代理: 這是寫什麼Spring documentation

Note: 


    You do not need to use the <aop:scoped-proxy/> in conjunction with beans that are scoped as singletons or prototypes. It is an error to try to create a scoped proxy for a singleton bean (and the resulting BeanCreationException will certainly set you straight in this regard). 

雖然它是指一個很老的版本,但需要注意的是仍然有效IMO。雖然我從來沒有嘗試過。儘管如此,可以有很多原因來代理單身bean,「proxy」是一個非常廣泛的概念。例如,當我們使用@Transactional其代理時,還有許多其他示例。事情是,這不是一個「範圍代理」,它可以被看作是一種非常特殊的代理,顯然不適用於單身人士。

希望這會有所幫助

相關問題