Web应用程序上下文范围的奇怪行为

3

在一个webservice中使用Spring,我有如下代码:

@RequestMapping(value = "/testOperation", method = GET)     
public String testOperation() throws Exception 
{                   
    ts.setName("First Value");
    ts.name = "Second Value";
    return ts.getName() + " and " + ts.name;                
}

收到的响应是“第一个值和第二个值”。我不明白为什么不是“第二个值和第二个值”。ts 是一个请求范围内注入的变量。 代码如下:
@Component
@Scope(value=WebApplicationContext.SCOPE_REQUEST, proxyMode=ScopedProxyMode.TARGET_CLASS)
public class TS implements Serializable{        
    public String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

我不理解这个行为

1个回答

1

由于TS被配置为请求范围,显然Spring会为其创建代理。因此,setNamegetName的调用将被重定向到为每个请求创建的TS实例。但是,直接字段引用无法代理,它仅影响注入到控制器的实例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接