Spring 访问控制器内的会话范围bean
我正在Spring3中试验会话范围的bean。我有以下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包装在单例代理中,当您调用作
<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();
}
}