我有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的工作方式吗?如果是这样,那么解决方法是什么 感谢
答案 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()
这似乎是你的问题。