我正在尝试将会话范围的inputForm bean注入到Singleton范围的控制器中,但是InputForm bean会改为使用singleton范围。任何帮助是极大的赞赏。
@Controller
@RequestMapping("/app")
public class MyAppController {
// AOP session scoped proxy type CGLIB
@Autowired private InputForm inputForm;
@RequestMapping(value = "/home", method = RequestMethod.GET)
public ModelAndView returnHome() {
Map<String, Object> modelMap = new HashMap<String, Object>();
modelMap.put("inputForm", inputForm);
return new ModelAndView("homePage", modelMap);
}
@RequestMapping(value = "/process", method = RequestMethod.POST)
public ModelAndView processData(@ModelAttribute("inputFormAttr")
InputForm inputFormBinding) {
// inputFormBinding is the data bound from inputs in jsp page.
this.inputForm = inputFormBinding;
}
<bean id="inputForm" class="<package>.InputForm"
scope="session" init-method="init">
<property name="id" value="${property_id}"/>
<property name="name" value="${property_name}"/>
<property name="phoneNo" value="${property_phone}"/>
<aop:scoped-proxy proxy-target-class="true"/>
</bean>
答案 0 :(得分:1)
你做得很好。 Spring会将代理注入注入目标
@Autowired private InputForm inputForm;
但是当您在此对象上调用方法时,代理将委托给将存储在HttpSession
中的对象。
请注意,每个目标bean都具有通过属性占位符设置的相同属性
<property name="id" value="${property_id}"/>
那些可能会在你的调试中误导你,但bean确实有会话范围。