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

标签 java spring spring-mvc scope

在 web 服务上使用 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;                
}

收到的响应是“第一值和第二值”。我不明白为什么不是“Second Value and Second Value”。 ts 是一个请求范围注入(inject)变量。代码是:

@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;
    }
}

我不理解这种行为

最佳答案

由于 TS 被配置为请求范围,显然 spring 为它创建了代理。因此 setNamegetName 调用被重定向到为每个请求创建的 TS 实例。但是不能代理直接字段引用,它只影响注入(inject)到 Controller 的实例。

关于java - Web 应用程序上下文范围的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36401494/

相关文章:

java - 从 DistributedCache 读取 Hadoop 作业的分片输出

java - Spring BeanCreationException

java.lang.ClassNotFoundException : org. slf4j.Logger 异常

javascript - 在 Spring MVC 中返回 @Async 方法结果并将其返回给 Ajax 客户端

java - 为什么 Java SimpleDateFormat 在某些服务器上工作而在其他服务器上工作?

java - 从 JKS 导出公钥并从 Java 读取

java - JVM 同步 Finally block

java - 我应该为此特定方法创建 2 个单元测试吗? Spring MVC 应用程序

spring - 预授权不适用于 Controller

java - 如何在整个 App 中使用同一个 ClassPathXmlApplicationContext 实例?