このアプリケーションには、次のレイヤーと相互作用があります。
ビュー(JSP)->Ajax呼び出し->MyController(Spring Controllerを実装)->カスタムサービスルックアップを介して-> MyService(ベースサービスを実装)-> My DAOimpl
私たちのアイデアは、例外のロギングにAOPを使用することです。AOPインターセプトを単純に保つために、コントローラーのカットを定義することにしました。コントローラには、handleRequestメソッドから呼び出されるonLoad、onUpdate(CRUD opsに関連する)などのいくつかのメソッドがあり、poitncutに対してこれらのメソッドを定義したいと思います。つまり、サービスレイヤー以下での例外は、バブルアップしてコントローラーに到達します。スロー例外をインターセプトし、例外の詳細をログに記録するように定義されたAOPポイントカット。その後、エラーコードがビューに返送され、エラーメッセージが適切に表示されます。
問題:-AOPがonLoadなどのメソッドの呼び出しをインターセプトしません。これは、handleRequestからのこれらのメソッドの呼び出しが、コントローラーでの自己呼び出しとして扱われるため、AOPがそれらをインターセプトしないためであると理解しています。-上記の問題を回避するために、onLoad、onUpdateメソッド、およびonLoadなどのメソッドを実装する一連のutilクラスを使用してインターフェイスを作成しました。コントローラには、これらのutilsがメンバーとして含まれます。ポイントカットは、コントローラーではなく、これらのユーティリティで定義されます。これを行う場合、AOPは、AOP構成がspring-servlet xmlに存在し、AOP宣言のカスタムxmlには存在しない場合にのみ機能します。この観察は、コントローラーのみを対象としています。AOPカットがサービスレイヤーで定義されている場合、宣言は期待どおりに機能します(カスタムxmlで)。
必要な提案:-コントローラーに対してAOPを定義する必要がありますか?これはサービスレイヤーでのみ定義する必要がありますか?コントローラでは、例外が「キャッチ」され、エラーメッセージが送信されて適切に表示されます。元のアプローチに根本的な問題があるかどうかを確認したかった。