Java AOP会话作用域代理获取单例作用域
我试图将会话范围的InputFormbean注入到单例范围的控制器中,但InputFormbean得到的是单例范围。非常感谢您的帮助Java AOP会话作用域代理获取单例作用域,java,spring,spring-mvc,spring-aop,Java,Spring,Spring Mvc,Spring Aop,我试图将会话范围的InputFormbean注入到单例范围的控制器中,但InputFormbean得到的是单例范围。非常感谢您的帮助 @Controller @RequestMapping("/app") public class MyAppController { // AOP session scoped proxy type CGLIB @Autowired private InputForm inputForm; @RequestMapping(value = "/home", m
@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>
@控制器
@请求映射(“/app”)
公共类MyAppController{
//AOP会话作用域代理类型CGLIB
@自动连线专用输入格式输入格式;
@RequestMapping(value=“/home”,method=RequestMethod.GET)
公共模型和视图返回主页(){
Map modelMap=新的HashMap();
modelMap.put(“inputForm”,inputForm);
返回新的ModelAndView(“主页”,modelMap);
}
@RequestMapping(value=“/process”,method=RequestMethod.POST)
公共模型和视图processData(@ModelAttribute(“inputFormAttr”)
InputForm(inputFormBinding){
//inputFormBinding是jsp页面中输入的数据绑定。
this.inputForm=inputFormBinding;
}
您所做的很好。Spring将向注入目标注入代理
@Autowired private InputForm inputForm;
但是,当您调用此对象上的方法时,代理将委托给将存储在HttpSession
中的对象
请注意,每个目标bean都将通过属性占位符设置相同的属性
<property name="id" value="${property_id}"/>
这些可能会误导您进行调试,但bean确实有会话作用域。您如何判断它是单例的?您如何加载
控制器类?
@Sotirios:默认作用域是单例的,对吗?是的,默认作用域是单例的。但是您没有使用默认作用域。您使用了会话。对不起,我的意思是控制器在singleton中不是被注入的bean,但是我如何才能在会话范围中获取属性?@user4923412341您正在将从该bean定义创建的所有对象的属性设置为相同的值。如果您在一个会话中更改一个,它将不会影响另一个会话中的另一个。但这是我的问题。我打开了pp在不同的机器中,它们在inputForm中看到的属性与第一台机器相同map@User49234123412341您是否更改了这两台机器中的属性值?当get请求被调用