AOP会话范围代理获取单一范围

时间:2014-07-01 17:04:38

标签: java spring spring-mvc spring-aop

我正在尝试将会话范围的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>

1 个答案:

答案 0 :(得分:1)

你做得很好。 Spring会将代理注入注入目标

@Autowired  private InputForm inputForm;

但是当您在此对象上调用方法时,代理将委托给将存储在HttpSession中的对象。

请注意,每个目标bean都具有通过属性占位符设置的相同属性

<property name="id" value="${property_id}"/>

那些可能会在你的调试中误导你,但bean确实有会话范围。