2012-02-03 4 views
10

私のWeb要求に機能を追加する自分の注釈を実装するために必要なことを誰でも説明できますか?例えばSpring MVCにカスタムアノテーションを追加するには?

:ここ

@Controller 
public class MyController { 
    @RequestMapping("/abc") 
    @RequiresSomeSpecialHandling 
    public void handleSecureRequest() { 
    } 
} 

@RequiresSomeSpecialHandlingが与えられたWebリクエスト/abc前または後に行うことにいくつかの特別な作業が発生し、私自身のアノテーションになります。

非常に高いレベルでは、Beanポストプロセッサを作成し、注釈のクラスをスキャンし、必要に応じてカスタムmvcインターセプタを注入する必要があることは知っています。しかし、この作業を簡略化するためのショートカットはありますか?特に上記の2つの例の場合。事前に

おかげで、

+1

ところで「@RequiresAuth」が単なる例であれば良いですが、春のセキュリティを改革しないでください – Ralph

+0

これは単なる例であり、例をより一般的なものにするために私の投稿を編集しました。 – rustyx

答えて

2

@RequiresSomeSpecialHandlingの結果として何をしたいかによって異なります。例えば。リクエストのマッピングやメソッドの呼び出し(メソッドの引数の解決、戻り値の処理など)に影響を与えたいですか?

Spring 3.1の注釈付きクラスのサポートは、よりカスタマイズ可能になりました。 this repoの例を参照できます。

Spring 3.1のHandlerInterceptorはハンドラオブジェクトをHandlerMethodにキャストできることに注意してください。これにより、注釈を含む正確なメソッドにアクセスできます。それはあなたがする必要があるものに十分かもしれません。

4

注釈のこの種は、(メソッドを呼び出すときには、追加機能を追加)AOPアドバイスをトリガー注釈のように見えます。

@see春Reference Chapter 7. Aspect Oriented Programming with Spring


考え方は、AOPアドバイスをトリガするために注釈を使用することです。

のような:

@Pointcut("@target(com.example.RequiresAuth)") 
+0

ありがとうございます。はい、AOPは私のリストにありますが、注釈を作ってできるだけ多くのMVC機能を再利用しようと思います。 – rustyx

+0

@rustyx:はい、それは背後にあるアイデアでした.AOP Adviceを起動するためにAnnotationを使用してください。 – Ralph

+0

私は、 '@ annotation'がポイントカット式を書くのに便利だと思います。 –

-2

キャッシュがあなたの目標の一つである場合には、春3.1のように利用できる@Cacheable注釈(およびその兄弟@CachePut@CacheEvict@Caching)を見て、取ります。

+0

申し訳ありませんが、あなたの答えは役に立たないです。私の例の@NoCacheアノテーションは、HTTPノー・キャッシュ、メソッド・キャッシュではなく、とにかく例に過ぎませんでした。 – rustyx

関連する問題