如何设置控制器范围的全局变量

目前我使用@ModelAttribute在我的@Controller设置全局变量(例如页脚的推文):

 public @Controller class MainController { public @ModelAttribute void global(ModelMap map) { map.addAttribute("tweets", /*...*/null); } } 

但是在创建另一个控制器以保持干净和分离时,它们在逻辑上已经消失了:

 public @Controller class GalleryController { // ... } 

设置全局变量控制器范围的最佳做法是什么?

如果你想把一些数据放到每个页面,很容易使用拦截器:

 public class PagePopulationInterceptor extends HandlerInterceptorAdapter { @Autowired private UserService userService; @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { if(modelAndView != null) { User user = userService.findOne(request); modelAndView.addObject("myUserProfile", user); } } } 

为了使这项工作也在webmvc-config.xml中声明拦截器(webapp的spring配置):

        

你可以扩展HandlerInterceptorAdapter并添加常见的modelAttributes thr