我希望能够实例化一个请求范围的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(...)
方法,只能调用一次(将第二次抛出)。我不喜欢它。