2017-04-18 11 views
0

実行時にカスタムアノテーションを使用することに関して質問があります。java注釈 - ランタイム時の自動使用

私が達成しようとしていることをあなたに記入してください。カスタムアノテーションを作成し、それをサービスクラスのメソッドに適用しました。

public class MyService 
{ 
    @MyCustomAnnotation 
    public String connect() 
    { 
     return "hello"; 
    } 
} 

今、私は行くとメソッドを処理するためにリフレクションを使用して、私のカスタム注釈が適用されていた方法にロジックのいくつかの種類を適用することができます。

for(Method method : obj.getClass().getDeclaredMethods())   
{   
    // Look for @MyCustomAnnotation annotated method     
    if(method.isAnnotationPresent(MyCustomAnnotation.class))    
    { 
     // Do something... 
    } 
} 

しかし、私は実行時に自動的に反射処理ステップを適用する方法を理解できないため、パズルの一部が欠落しているようです。

たとえば、アプリケーションで次のようなメインメソッドを使用している場合、リフレクト処理ステップを自動的に適用するにはどうすればよいですか?

public static void main(String[] args) 
{ 
    MyService service = new MyService(); 
    service.connect(); 
} 

バネ等の他のフレームワークは、それを達成することができますが、私は、彼らがこれを行う方法の例を見つけることができないとして明らかにこれは可能です。 @Beri

+0

この注釈スキャンは、サービスの作成時または使用準備が整った時点で行う必要があります。ある時点ですべてのクラスをスキャンし、それらを適用することができます:http://stackoverflow.com/questions/520328/can-you-find-all-classes-in-a-package-using-reflection – Beri

+0

@Beri - 注釈スキャン? –

+1

またはアスペクト:http://www.yegor256.com/2014/06/01/aop-aspectj-java-method-logging.html単一のアプリケーションポイントでは、単にaspectを呼び出して注釈付きのすべてのメソッドを探します。 – Beri

答えて

0

クレジットは、私は解決策を作成するための側面を使用しました。

1

リフレクションは、コンパイル時に何かする必要がある場合に便利です。メソッドの呼び出し時に何かしたい場合は、Aspect Oriented Programmingを使用する必要があります。 Javaの最も一般的なフレームワークはAspectJです。

私は多モジュールの例を持っていますhereです。これはスカラーの例ですが、スカラの依存関係やクラスを省略してJavaで実装することができます。 複数の場所でアスペクトを使用する場合は、アスペクトを含めるために別のモジュールに実装し、ロジックを繰り返さないようにする必要があります。

関連する問題