メソッドの入力の属性を取得しようとしていますが、属性にアクセスするかgetメソッドを使用するためのオプションがなくてもメソッドの入力のみを取得できます。例えばAspectJ Annotationを使用してメソッド入力の属性を取得
ここcloudFileは基本的にファイルを含む多くのものが含まれているクラス、であり、それはcloudFile.getSizeを(使用して、ファイルのサイズを取得することが可能です私のコード
@Around("execution (* *(cloudFile))")
public Object captureFileAttribute(ProceedingJoinPoint joinPoint) throws Throwable {
Object result = joinPoint.proceed();
System.err.println(joinPoint.getArgs()[0]);
return result;
}
があります) ; (メソッドを得る)。基本的にはcloudFileクラスには、次のようになります。
public class CloudFile implements Comparable<CloudFile> {
...
public CloudFile(CloudFolder folder, File file, FileSyncStatus syncStatus, TrustLevel trustLevel, String checksum) {
...
}
...
public long getSize() {
return size.get();
}
...
}
上記のコードから、私はA.TXTようですが、この場合には(ファイルに含まれる属性にアクセスするオプションを使用せず、唯一のファイルの名前を印刷することができますよ私は5 KBのサイズを取得したいと思います)。 AspectJが渡した引数から変数やメソッドにアクセスする方法はありますか?それを行うオプションはありますか?
public privileged aspect MemberAccessRecipe
{
/*
Specifies calling advice whenever a method
matching the following rules gets executed:
Class Name: MyClass
Method Name: foo
Method Return Type: void
Method Parameters: an int followed by a String
*/
pointcut executionOfFooPointCut() : execution(
void MyClass.foo(int, String));
// Advice declaration
after(MyClass myClass) : executionOfFooPointCut() && this(myClass)
{
System.out.println(
"------------------- Aspect Advice Logic --------------------");
System.out.println(
"Accessing the set(float) member of the MyClass object");
System.out.println(
"Privileged access not required for this method call as it is
public");
myClass.setF(2.0f);
System.out.println(
"Using the privileged aspect access to the private f member
variable");
System.out.print("The current value of f is: ");
System.out.println(myClass.f);
System.out.println(
"Signature: " + thisJoinPoint.getSignature());
System.out.println(
"Source Line: " + thisJoinPoint.getSourceLocation());
System.out.println(
"------------------------------------------------------------");
}
}
、今私は混乱していますと等しいを見つけよう:私はこのような通常のAspectJ何かで私の質問に答えるために似た何かを発見した
おかげ
UPDATE
AspectJアノテーションで書く。
を、それは同じことだとしても、それだけでファイルの名前をキャプチャしますがcloudFile –
の内部ではない、関連する方法はそれとしてあなたに同じインスタンスを与えない@IhsanHaikalので、私は推測しますあなたが 'cloudFile'について何も指定しなかったので本当のメソッドに渡されたものはありません。atm –
私は多分あなたに少し助けてくれるかもしれない私の質問を更新しました –