2017-09-07 61 views
0

私はSpringを使っていくつかの残りのWebサービスを実装しました。 私はすべてのWebサービスの前に実行する必要がある共通のコードをいくつか持っています。 私は明示的に、この共通コードを各Webサービスの開始時に明示的に呼び出します。Spring Webサービスを実行する前にいくつかのコードを実行するには

Webサービスを呼び出す前にスプリングを「自動的に」呼び出す方法はありますか?

+1

のためのGoogle検索あなたは 'Webサービスを呼び出す前に' を定義することはできますか? (認証、監査ロギング、セッションの初期化など)、サービスを呼び出す前に何らかの設定ステップ(プールの初期化、リソースとマップのロード/準備、参照テーブルの作成など)等。)? – user2478398

+0

コードを試しましたか?より明確なシナリオのためにそれらを投稿できますか? –

+0

リクエスト情報(ブラウザ、IP、OSバージョン)を保存する必要があります。httpRequestオブジェクトにアクセスする必要があります。これは、すべてのWebサービスで手動で行うのではなく、春にサポートされているものがあれば尋ねています。 –

答えて

0

あなたは春AOPの切片ごとにWebサービスを使用して、次のコードit.Likeに共通のコードを実行する必要があります

<bean id="aspect" class="com.zhuyiren.Aspect"/> 

<aop:config> 
    <aop:aspect ref="aspect"> 
     <aop:before method="before" pointcut="execution(* com.zhuyiren.service..*.*(..))"/> 
    </aop:aspect> 
</aop:config> 

コードの上に呼び出しを意味することにcom.zhuyiren.serviceでパッケージ化され、いくつかの豆のすべての方法を常に実行。あなたはcommon method.Likeに共通のコードを書くことができcom.zhuyiren.Aspect方法common

public void common(){ 
    System.out.println("execute some common code"); 
} 

テストケース:

public static void main(String[] args) throws Exception { 
    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("test.xml"); 
    UserService service = context.getBean(UserService.class); 
    System.out.println(service.getUser(3)); 
} 

プリントは次のとおりです。あなたはそれを拡張し、必要なリクエストから情報を抽出することができます

execute some common code 
UserInfo{id=3, name='zhuyiren', password='123456', testString=[]} 
0

がHandlerInterceptorAdapter を見てみましょう

ベストの答えは、コードに依存し

0

あなたが実行したいものです。

1つの手法は、@ dabaicaiの回答に記載されているように、AOPを使用することです。

異なる手法は、JEEフィルタを追加して、リクエストがハンドラメソッドに入る前に処理することです。

はここにいくつかのリンクです:

  • Oracle's Essentials of filters
  • Mkyong's Spring JEE filters
  • JEE6 Tutorial Filtering Requests and Responses
    1. - 塩の粒でこれを取り、Mkyongは光が説明です。

    別のオプション: "春のJEEフィルタ"

    関連する問題