2016-10-12 13 views
2


私は2つのモジュールでアンドロイドアプリケーションを持っています。

最初のモジュールは以下の様に定義されたActivityクラスが含まれています MyActivity extends AppCompatActivityAndroidスタジオの別のモジュールの@Pointcutメソッドはどうですか?

第2のモジュールは、私が@PointcutMyActivity.onCreateにメソッドを作成したいアスペクトクラス、 が含まれています。

そうのように定義されている場合には動作します: @Pointcut("execution(* *.onCreate(..))")

ただ、ANY onCreateコールをしたい が、MyActivity.onCreateAppCompatActivity.onCreateません。

試しました@Pointcut(execution(* MyActivity.onCreate(..))),しかし、動作しません。

他のモジュールからクラスを参照するには、どうすれば@Pointcutとすればよいですか?

どのようにextendエドクラスはアスペクトで動作しますか? たとえば、@PointcutAppCompatActivityを作成すると、MyActivityでも動作します。それは子供ですか?クラスを使用するたびに、あなたのポイントカットの定義では任意の応答:)

+0

を見つけました。それはうまくここに記述されています:http://perfspy.blogspot.cz/2013/09/differences-between-aspectj-call-and.html – milkamar

答えて

0

ため

おかげで、コンパイラはあなたがunambigouslyに参照のうえいるどのクラスかを知る必要があります。これを行うには、クラスの正規名を使用する必要があります。例えば

あなたの活動がパッケージcom.company.projectである場合、その後、あなたのポイントカットは次のようになります。execution`と `` call`間の違いは、それがdeterminatedされた時間、ある

@Pointcut(execution(* com.company.project.MyActivity.onCreate(..))) 
+0

実際にはこれは完全ではない@milkamarはベースクラスをキャプチャするポイントカットを望んでいたので。したがって、@Pointcut( "実行(* com.x.y.AppCompatActivity.onCreate(..))") 'にする必要があります。これは、サブクラスからオーバーライドされたメソッドだけでなく、基本クラスのメソッドも取得します。より明示的にするには、オプションで '+'を使用してサブクラスをキャプチャする意図を示すこともできます。この場合は厳密には必要ではありませんが、他の場合には役立ちます。 '@Pointcut("実行(* com.x.y.AppCompatActivity + .onCreate(..)) ")'のようになります。二重引用符も忘れてしまった。 – kriegaex

関連する問題