我正在 Spring 3 中试验 session 范围的 bean。我有以下 bean 定义:
<bean id="userInfo" class="net.sandbox.sessionbeans.UserInfo" scope="session" />
这里是
net.sandbox.controllers.RegistrationController
, 一个需要访问这个 bean 的 Controller 类。为了简洁起见,我已经删除了进口商品。
@Controller
@RequestMapping("/register")
public class RegistrationController {
private UserInfo userInfo; // This should reference the session-scoped bean
@RequestMapping(method = RequestMethod.GET)
public String showRegForm(Model model) {
RegistrationForm regForm = new RegistrationForm();
model.addAttribute("regform", regForm);
return "regform";
}
@RequestMapping(method = RequestMethod.POST)
public String validateForm(@Valid RegistrationForm regForm, BindingResult result, Model model) {
if (result.hasErrors()) {
return "regform";
}
userInfo.setUserName(regForm.getFirstName());
model.addAttribute("regform", regForm);
return "regsuccess";
}
}
有没有办法自动将我定义的 session 范围 bean 绑定(bind)到成员变量
private UserInfo userInfo
在
RegistrationController
?
请您参考如下方法:
是 - 见 section 3.4.5.4 of the Spring manual, "Scoped beans as dependencies" .
简而言之,您可以要求 Spring 将您的 session 范围 bean 包装在一个单例代理中,当您在范围 bean 上调用方法时,该代理会查找正确的 session 。这称为“范围代理”,并使用 <aop:scoped-proxy>
配置宏。然后,您可以像其他任何方式一样注入(inject)引用(例如 <property>
或 @Autowired
)。有关详细信息,请参阅上面的链接。