Skip to main content
 首页 » 编程设计

spring之访问 Controller 内的 session 范围 bean

2025年01月19日12jackei

我正在 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 userInfoRegistrationController ?

请您参考如下方法:

是 - 见 section 3.4.5.4 of the Spring manual, "Scoped beans as dependencies" .

简而言之,您可以要求 Spring 将您的 session 范围 bean 包装在一个单例代理中,当您在范围 bean 上调用方法时,该代理会查找正确的 session 。这称为“范围代理”,并使用 <aop:scoped-proxy>配置宏。然后,您可以像其他任何方式一样注入(inject)引用(例如 <property>@Autowired )。有关详细信息,请参阅上面的链接。