不可变的春天请求范围豆

时间:2018-03-05 13:53:32

标签: java spring scope request

我希望能够实例化一个请求范围的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);
    }
}

MyController.java

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的不变性,它需要只在控制器中知道的构造函数参数?

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

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

0 个答案:

没有答案