Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不可变的spring请求作用域bean_Java_Spring_Scope_Request - Fatal编程技术网

Java 不可变的spring请求作用域bean

Java 不可变的spring请求作用域bean,java,spring,scope,request,Java,Spring,Scope,Request,我希望能够使用构造函数参数实例化一个请求范围的bean,该bean也是不可变的。 类似于以下内容(当然不起作用): RequestContextFactory.java package org.springframework.samples.mvc.requestscope; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuratio

我希望能够使用构造函数参数实例化一个请求范围的bean,该bean也是不可变的。 类似于以下内容(当然不起作用):

RequestContextFactory.java

package org.springframework.samples.mvc.requestscope;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.annotation.RequestScope;

@Configuration
public class RequestContextFactory {
    @Bean
    @RequestScope
    public RequestContext getRequestContext(TestBean bean) {
        return new RequestContext(bean);
    }
}
package org.springframework.samples.mvc.requestscope;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class MyController {
    @Autowired
    RequestContextFactory requestContextFactory;

    @RequestMapping("/my")
    public @ResponseBody String simple(TestBean bean) {
        RequestContext requestContext = requestContextFactory.getRequestContext(bean);
        return "Hello world!";
    }
}
MyController.java

package org.springframework.samples.mvc.requestscope;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.annotation.RequestScope;

@Configuration
public class RequestContextFactory {
    @Bean
    @RequestScope
    public RequestContext getRequestContext(TestBean bean) {
        return new RequestContext(bean);
    }
}
package org.springframework.samples.mvc.requestscope;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class MyController {
    @Autowired
    RequestContextFactory requestContextFactory;

    @RequestMapping("/my")
    public @ResponseBody String simple(TestBean bean) {
        RequestContext requestContext = requestContextFactory.getRequestContext(bean);
        return "Hello world!";
    }
}
Spring抱怨它不能自动连接一个
TestBean
bean来创建
RequestContext
。 如何实现请求范围bean的不变性,该bean只需要控制器中已知的构造函数参数

我希望能够将RequestContext注入到其他bean中(请求范围或其他范围)。这是反模式吗?控制器下所有调用层次结构的签名中是否应该有类似于
RequestContext
(或具有请求生命周期的任何其他对象)的内容

注:
我认为这是一种解决方案,例如使用带有默认构造函数的
RequestContext
和只能调用一次(将抛出第二次)的
init(…)
方法。我不喜欢它。

你想达到什么目的?为什么需要操作请求范围的bean?对我来说,听起来更像是一种拦截器/侦听器。看看
.web.context.request.RequestContextListener
。答案似乎很明显-不要在
TestBean
类中使用setter方法。反斜杠:我正在尝试创建一个不可变的RequestContext,它需要输入(对于exmaple)请求参数,这些参数只有在controller方法中才知道。普罗霍罗夫:请详细说明,也许在回答中。。。谢尔盖·普罗科维耶夫:这与TestBean无关,我希望RequestContext是不可变的