在Spring MVC中设置全局模型属性的最佳实践是什么?
问题内容:
我有一个数据驱动(缓存)菜单,它是一个全局组件。我希望能够为每个请求注入菜单项,因为每个页面都将使用它。放置它的最佳位置是什么?我正在使用基于注释的Spring3。我能想到的最佳解决方案是使用OncePerRequestFilter并将其添加到该子类或对Controller进行子类化,但不确定如何使用@Controller批注来实现。
问题答案:
我可以想到两个简单的选择:
每个@Controller
类都将数据公开为带有注释的方法@ModelAttribute
,例如
@ModelAttribute
public MyData getMyData() {
...
}
但是,如果您有多个控制器,那并不是很好。而且,这具有myData
为每个重定向将on 编码为URL 的烦人的副作用
我建议改为实施一个HandlerInterceptor
,然后以这种方式将数据公开给每个请求。您不能使用任何喜欢注释的方法,但最好通过这种方式将其与业务逻辑分开。这与您的OncePerRequestFilter
想法相似,但更具弹性。