Spring MVC使用应用程序范围级别属性而不是会话范围级别属性

时间:2014-03-22 06:27:26

标签: spring spring-mvc

在Spring MVC中我们可以使用

@SessionAttributes("variable")

model.addAttribute("variable", new Object());

这样一旦设置此变量就可用于用户会话。

现在我希望在应用程序范围内设置此变量,以便user 1设置此属性时,我的所有用户user 2user 3user 4都可以使用此属性等

这个变量将在我的jsp页面上使用。 请建议。

2 个答案:

答案 0 :(得分:3)

您可以将一个简单的Pojo定义为Spring Bean Service。

@Service
public class MyVariable{

    private Object myVar;

    public Object getMyVar() {
        return myVar;
    }

    public void setMyVar(Object myVar) {
        this.myVar = myVar;
    }

}

然后,你可以在你的@Controller中@Autowired这个服务并获得它。

答案 1 :(得分:3)

如果您的意思是Web应用程序范围,则需要在ServletContext属性中进行设置。因为从用户的角度来看,这在Web应用程序中并不常见,所以Spring并没有提供快捷方式。相反,只需通过将ServletContext注入@Controller或将其作为参数提供给处理程序方法并添加属性

来检索ServletContext ctx = ...; ctx.setAttribute("name", new Object());
ServletContext

请注意,每个Web应用程序只有一个ServletContext。 {{1}}不保证任何原子性,即。它没有同步。如果应用程序需要,您需要自己进行同步。