我试图将 session 范围的 inputForm bean 注入(inject)到 Singleton 范围的 Controller 中,但 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>
最佳答案
你正在做的事情很好。 Spring将代理注入(inject)到注入(inject)目标
@Autowired private InputForm inputForm;
但是当您调用此对象上的方法时,代理将委托(delegate)给将存储在 HttpSession
中的对象。
请注意,每个目标 bean 将具有通过属性占位符设置的相同属性
<property name="id" value="${property_id}"/>
这些可能会在调试时误导您,但 bean 确实具有 session 范围。
关于java - AOP session 范围代理获取单例范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24515760/