Spring-cglib代理类层次结构中的行为

时间:2013-01-31 15:50:37

标签: java spring spring-mvc proxy 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。我哪里出错。请帮助。 这是cglib的工作方式吗?如果是这样,那么解决方法是什么 感谢

1 个答案:

答案 0 :(得分:1)

由于在调用someMethod时没有HttpSession,因此(非常)可以获得null。

这是aop-scoped-proxy的预期行为。请注意,aop-scoped-proxy实际上是一个单例尝试从配置的范围中检索taget对象,如果没有找到则创建一个新的,在每个方法调用中都

因此,如果HttpSession不存在,则aop-scoped-proxy会将所有调用重定向到新创建的对象。

即:

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

这似乎是你的问题。