0

私は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 am I going wrong.Pls を出力します。これはcglibの仕組みですか?もしそうなら、これの回避策は何ですか?ありがとう

4

1 に答える 1

1

someMethod を呼び出すときに HttpSession がないため、null になる可能性が非常に高いです。

これは、aop-scoped-proxy の予想される動作です。aop-scoped-proxy は実際には 、すべてのメソッド呼び出しで、構成されたスコープからターゲット オブジェクトを取得するか、何も見つからない場合は新しいオブジェクトを作成しようとするシングルトンであることに注意してください。

したがって、HttpSession が存在しない場合、aop-scoped-proxy はすべての呼び出しを新しく作成されたオブジェクトにリダイレクトします。

すなわち:

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

それはあなたの問題のようです。

于 2013-01-31T18:29:56.957 に答える