共通データをモデルに注入するインターセプターを作成できます。インターセプターを使用する優れた機能は、選択した URL に簡単にマップできることです。
public class CommonDataInjectingInterceptor extends HandlerInterceptorAdapter {
@Autowired
private CommonDataHolder holder;
public void setCommonDataHolder(CommonDataHolder holder) {
this.holder = holder;
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
if (holder != null && modelAndView != null) {
modelAndView.addObject("menu", holder.getMenu());
modelAndView.addObject("footer", holder.getFooter());
}
}
}
もう 1 つの方法は、@ControllerAdvice
すべてのコントローラーで共有される一般的な動作を定義する を作成することです。@ControllerAdvice
Spring 3でのそのような機能はかなり基本的なものです。Spring 4 では、影響を受けるコントローラーを制御する新しいオプションが導入されています。
@ControllerAdvice
と組み合わせて使用すると、@ModelAttribute
非常に便利です。Ayub Malik が彼の回答で部分的に説明したように。
@ControllerAdvice
public class CommonDataControllerAdvice {
@Autowired
private CommonDataHolder holder;
public void setCommonDataHolder(CommonDataHolder holder) {
this.holder = holder;
}
@ModelAttribute("menu")
public Menu menu() {
return holder.getMenu();
}
@ModelAttribute("footer")
public Footer footer() {
return holder.getFooter();
}
}
Spring 3 コントローラーのアドバイス:
http://docs.spring.io/spring/docs/3.2.7.RELEASE/javadoc-api/org/springframework/web/bind/annotation/ControllerAdvice.html
Spring 4 コントローラーのアドバイス
http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/ControllerAdvice.html