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。我哪里出错了。请帮忙。这是 cglib 的工作方式吗?如果是这样,解决方法是什么谢谢

4

1 回答 1

1

(非常)有可能你得到空值,因为你在调用 someMethod 时没有 HttpSession。

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

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

IE:

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

这似乎是你的问题。

于 2013-01-31T18:29:56.957 回答