2013-01-31 45 views
0

彈簧CGLIB代理行爲我有2個班的類層次

@Component 
    @Scope(proxyMode=ScopedProxyMode.TARGET_CLASS,value="session") 
    public class Child extends Base{ 
    } 

    @Component 
    @Scope(proxyMode=ScopedProxyMode.TARGET_CLASS,value="session") 
    public class Base{ 
    private UserVO user; 

    public UserVO getUser(){ 
    return user; 
    } 
    public void setUser(UserVO usr){ 
    this.user = usr; 
    } 
    } 

    I call the following method 
    public class SomeClass{ 
    @autowired 
    private Child child; 
    public void someMethod(){ 
    child.setUser(new UserVO()); 
    System.out.println(child.getUser()); 
    } 
} 

以上的System.out打印null.Where我要去wrong.Pls幫助。 這是CGLIB的作品?如果是的話究竟是什麼 感謝

回答

1

變通辦法中的辦法是,你得到空,因爲調用的someMethod當你沒有一個HttpSession(非常)更多鈔票。

這是一個AOP範圍的代理預期的行爲。需要注意的是AOP的作用域的代理是真的嘗試檢索從配置的範圍taget對象或在每一個方法調用創建一個新的,如果沒有被發現,單身。

所以,如果HttpSession中不存在的AOP範圍的代理會重定向到一個新創建的對象的所有調用。

即:

aopScopedProxy.setUser -- > new User().setUser() 
aopScopedProxy.getUser ---> new User().getUser() 

這似乎是你的問題。

+0

對不起,我無法理解,難道我不能設置用戶和VO出來的HttpSession?請找我edit.am居然自動裝配的會話類作用域的bean,然後使用該基準來設定userVO。 – RVP

+0

那麼,你需要的會話使用綁定到會話的AOP範圍代理。例如,你可以檢查的someMethod如果\t((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes())。getSessionId()拋出異常()... –