2013-07-29 35 views
1

基於Spring manual春季會議範圍的Bean的構造器啓動時被調用,兩次

代理對象的構造器會被稱爲兩次。這是CGLIB代理模型的一個自然結果,其中爲每個代理對象生成一個子類爲 。對於每個代理實例,將創建兩個 對象:實際代理對象和實現該建議的 子類的實例。

我有一個類是會話範圍。我觀察到構造函數在應用程序啓動期間第一次調用,即使沒有HTTPSession。第二次是在創建HTTPSession期間。只有在有會話的情況下,我如何才能延遲與ScopedProxyMode.TARGET_CLASS的bean實例化?我試過用@Lazy註解,但沒有效果。

@Component 
@Scope(value="session", proxyMode=ScopedProxyMode.TARGET_CLASS) 
public class WorkspaceImpl implements Workspace, Serializable { 

回答

1

要麼你把CGLIB代理,或改變的副作用ScopedProxyMode.INTERFACE通過使目標類實現一個接口(如果你自己的類),它使用JDK動態代理。查看JDK動態代理與CGLib的區別https://stackoverflow.com/a/10664208/418439