2014-12-26 33 views
0

當singleton bean被注入到請求範圍的bean中時,它被注入到singleton範圍的bean中是否常見? 例如,像這樣:是否適用於高負載彈簧應用?

@Scope(value="request", proxyMode=ScopedProxyMode.INTERFACES) 
public class CurrentUser { 
    @Resource 
    private UserRepository userRepository; 
    ... 
} 

public class ApplicationController { 

    @Autowired 
    private CurrentUser currentUser; 
    ... 
} 

是對內存管理的任何管理費用可能嗎?這個實現是否安全? 謝謝!

回答

2

本質上,發生的情況是每個活動的http請求都會有一個CurrentUser的實例。這些實例由Spring創建的代理進行管理,實例本身作爲http請求屬性進行維護,並且生命週期與此請求綁定。

我想說,在實例化和自動裝載每個CurrentUser請求實例的努力方面,這將代價高昂。它不應該是昂貴的記憶方式,因爲這些實例只有短暫的時間和範圍要求。在實例是否線程安全,是的。

雖然有一個錯誤,但proxyMode必須是ScopedProxyMode.TARGET_CLASS,因爲CurrentUser類沒有實現任何接口。

+0

謝謝!關於proxyMode = ScopedProxyMode.INTERFACES - 我知道這一點,謝謝。我縮短了繼承細節。 –