HandlerInterceptor
およびHandlerInterceptorAdaptor
の両方がpreHandle
およびpostHandle
の方法を有する。しかし、私は実装に関してそれらの違いは何かを理解することができません。Spring MVCのHandlerInterceptorとHandlerInceptorAdaptorの違いは何ですか?
答えて
のインターフェイスではなく、インターフェイスにプログラムすることをお勧めします。そして、Spring Frameworkはこれらのインターフェイスをかなり提供することでこのプラクティスを使用します。HandlerInterceptor
がその1つです。これらのインタフェースの中には、他のものより豊かなものもあります。したがって、クライアントとしてカスタム実装を提供し、それらのメソッドのうちのほんの一部だけを気にしたい場合は、いくつかの実際の実装と多くの空の実装に終わるでしょう。
たとえば、preHandle
メソッドの実装を提供し、他の2つについては気にしないとします。あなたも、よりリッチなインターフェースを実装しているときに、これらの空の実装が空のメソッドの負荷を想像し、10+
抽象メソッドとWebMvcConfigurer
のように、より大きな定型コードを引き起こす
public class CustomHandlerInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
// Some complex logic
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response,
Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
Object handler, Exception ex) throws Exception {
}
}
:残念ながら、あなたは他の二つのためのいくつかの空の実装を提供する必要があります。
この問題を解決するために、スプリングフレームワークは、通常、HandlerInterceptor
インターフェイスまたはWebMvcConfigurer
ためWebMvcConfigurerAdapter
ためHandlerInterceptorAdaptor
ように、これらのインタフェースのために対応する抽象アダプタを提供します。これらのアダプタは、これらのインタフェースのすべてのメソッドのデフォルトおよび単純化された実装の群に過ぎません。あなたは提供アダプターを使用して上記のコードをリファクタリングすることができます
public class CustomHandlerInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
// Some complex logic
}
}
これらの空の実装がHandlerInterceptorAdapter
クラスで提供されているので、あなただけのpreHandle
メソッドの実装を提供する必要があります。
私が言ったように、これは春Frameworkで繰り返されるテーマである、一般的な例のいくつかは、次のとおりです。
HandlerInterceptor
は、スタッフの契約を定義するinterface
です。実装する必要がある抽象メソッドは3
です。
afterCompletion
を傍受する必要がある場合でも、依然として2
の空のメソッドが必要です。
"Adapter"はabstract class
で、すべてのメソッドに対してデフォルトの空の実装を作成するので、必要なものを上書きするだけで済みます。これは、Java 8 default
メソッドの前に、これを冗長にする方法に注意してください。
preHandle
とpostHandle
の機能が必要な場合は、HandlerInterceptorAdaptor
を使用する必要があります。これら2つの方法をオーバーライドするだけで済みます。普通のHandlerInterceptor
を使用する場合は、コードをコンパイルするために空の方法が1つ必要です。これは不要な定型文です。
- 1. struts2とspring MVCの違い
- 2. spring mvcのハンドラアダプタとは何ですか?
- 3. Spring MVCのコントローラに値を渡すと、違いは何ですか?
- 4. Spring MVCとSpring Coreの違い
- 5. Spring JSP MVCとThymeleaf MVCの違い
- 6. Spring MVC:属性とは何ですか?
- 7. MVCのモデルとデータとデータベースの違いは何ですか?
- 8. Spring 4 MVC(servelt 2.5)とSpring 4 MVC(Servlet 3.0)の違いの相違点
- 9. MVC 4では、Microsoft.AspNet.MvcとSystem.Web.Mvcの違いは何ですか?
- 10. Spring MVCとSpring Web Flowとの違いは?
- 11. Spring MVCノンブロッキングとブロッキングのパフォーマンスの違い
- 12. Spring Securityのauthenticated()とcsrfの違いは何ですか?
- 13. Spring DataのMongoTemplateとMongoRepositoryの違いは何ですか?
- 14. Spring Bootの@ComponentScanと@EnableAutoConfigurationの違いは何ですか?
- 15. SpringのResponseEntityとHttpEntityの違いは何ですか?
- 16. MVCとMVVMの違いと類似点は何ですか?
- 17. Springで-Drun.profilesと-Dspring.profiles.activeの違いは何ですか?
- 18. MVCパターンのコントローラとコマンドパターンのコマンドの違いは何ですか?
- 19. ASP.NET MVCの<%#と<%=の違いは何ですか?
- 20. asp.net MVC 3のViewDataとPageDataの違いは何ですか?
- 21. mvcのtempdata.peek()とセッション変数の違いは何ですか?
- 22. DotnetNukeのC#DAL2 MVCとSPAの違いは何ですか?
- 23. ASP.NET MVCのRouteLinkとActionLinkの違いは何ですか?
- 24. Spring SingletonとJava Singleeleton(デザインパターン)の違いは何ですか?
- 25. マネージドBeanとSpring Controllerの違いは何ですか?
- 26. ZookeeperとSpring Cloud設定サーバーの違いは何ですか?
- 27. Spring Dispatcher ServletとWeb Deployment Discriptorの違いは何ですか?
- 28. SpringインターセプタとAOPの違いは何ですか?
- 29. 注釈付きSpring HandlerInterceptorマッピング
- 30. Page Controllerとmvcパターンの違いは何ですか?
'HandlerInterceptorAdapter'は'実装HandlerInterceptor'。もちろん、インターフェイスと同じメソッドがあります。 – dunni