Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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
Spring 访问控制器内的会话范围bean_Spring_Spring Mvc - Fatal编程技术网

Spring 访问控制器内的会话范围bean

Spring 访问控制器内的会话范围bean,spring,spring-mvc,Spring,Spring Mvc,我正在Spring3中试验会话范围的bean。我有以下bean定义: <bean id="userInfo" class="net.sandbox.sessionbeans.UserInfo" scope="session" /> 是否有一种方法可以自动将我定义的会话范围bean绑定到RegistrationController中的成员变量private UserInfo UserInfo?是-请参阅 简单地说,您可以要求Spring将会话作用域bean包装在单例代理中,当您调用作

我正在Spring3中试验会话范围的bean。我有以下bean定义:

<bean id="userInfo" class="net.sandbox.sessionbeans.UserInfo" scope="session" />
是否有一种方法可以自动将我定义的会话范围bean绑定到
RegistrationController
中的成员变量
private UserInfo UserInfo

是-请参阅

简单地说,您可以要求Spring将会话作用域bean包装在单例代理中,当您调用作用域bean上的方法时,单例代理将查找正确的会话。这称为“作用域代理”,并使用
config宏。然后,您可以像插入任何其他引用一样插入引用(例如
,或
@Autowired
)。有关详细信息,请参见上面的链接。

关于此评论:


我试着运用这个技巧。我把 豆子里面 定义和I@Autowired'd private 用户信息用户信息。它似乎起作用了, 但出于某种原因,豆子的主人 函数未正确执行。。。 i、 imgur.com/zkxVA.png–1小时 以前


如果使用基于接口的代理,则除非接口具有setter方法,否则setter方法在代理上不可用

默认情况下,Spring通过在运行时实现接口来创建代理。因此,代理上唯一可用的方法是在UserInfo实现的任何接口(如果有)中定义的方法。您可能需要创建一个包含setUserName()方法的合适接口

或者,您需要强制使用基于CGI的代理(代理是在运行时创建的类的子类,因此不需要接口)。具体说明:

<bean id="userInfo" class="net.sandbox.sessionbeans.UserInfo" scope="session" >
   <aop:scoped-proxy proxy-target-class="true"/>
</bean>

如果您不喜欢XML,也可以这样使用:

@RestController
public class MyController {
    private final ObjectFactory<MySessionScopedComponent> OFSession;

    @Autowired
    public MyController(ObjectFactory<MySessionScopedComponent> OFSession) {
        this.OFSession = OFSession;
    }

    @RequestMapping(path = "/path", method = RequestMethod.GET)
    public String myMethod () {
        MySessionScopedComponent sessionBean = OFSession.getObject();
        // Do some stuff
        return bean.myValue();
    }
}
@RestController
公共类MyController{
私人终审法院;
@自动连线
公共MyController(会话的对象工厂){
这个。of session=of session;
}
@RequestMapping(path=“/path”,method=RequestMethod.GET)
公共字符串myMethod(){
MySessionScopedComponent sessionBean=OFSession.getObject();
//做点什么
返回bean.myValue();
}
}

注意:使用Spring Boot 1.5.6(Spring 4.3)进行了测试。

我尝试应用此技术。我在上面写了
@Pieter有什么进展吗?,我也面临着同样的问题issue@Sudarshan不久前,我把这个网站作为一个短期学校项目的一部分,现在我已经不在做它了。很抱歉不过,如果能找到解决方案,祝你好运。基于接口的代理?我不熟悉Spring、Java web开发和设计模式,所以我恐怕不知道您在描述什么。我只知道我想访问和更新该控制器类中的“userInfo”bean。如果这没有什么帮助,我深表歉意。:)
@RestController
public class MyController {
    private final ObjectFactory<MySessionScopedComponent> OFSession;

    @Autowired
    public MyController(ObjectFactory<MySessionScopedComponent> OFSession) {
        this.OFSession = OFSession;
    }

    @RequestMapping(path = "/path", method = RequestMethod.GET)
    public String myMethod () {
        MySessionScopedComponent sessionBean = OFSession.getObject();
        // Do some stuff
        return bean.myValue();
    }
}