Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java AOP会话作用域代理获取单例作用域_Java_Spring_Spring Mvc_Spring Aop - Fatal编程技术网

Java AOP会话作用域代理获取单例作用域

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

我试图将会话范围的InputFormbean注入到单例范围的控制器中,但InputFormbean得到的是单例范围。非常感谢您的帮助

@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请求被调用