Я пытаюсь получить некоторые атрибуты ввода метода, но я могу получить вход метода только без какой-либо опции для доступа к атрибутам или с помощью любого метода get.Получить атрибуты ввода метода с использованием AspectJ Annotation
Например вот мой код
@Around("execution (* *(cloudFile))")
public Object captureFileAttribute(ProceedingJoinPoint joinPoint) throws Throwable {
Object result = joinPoint.proceed();
System.err.println(joinPoint.getArgs()[0]);
return result;
}
где cloudFile в основном это класс, который содержит много вещей, в том числе файл и его можно получить размер файла с помощью cloudFile.getSize() ; (метод get). В принципе класс 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 КБ). Есть ли способ доступа к переменным или методам из аргументов, передаваемых AspectJ? Есть ли возможность сделать это?
Благодаря
UPDATE
я нашел что-то подобное, чтобы ответить на мой вопрос в нормальном 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.
это то же самое, а я думаю, так как он только фиксирует имя файла, но не связанные с ним методы внутри от cloudFile –
@IhsanHaikal это даст вам тот же экземпляр, как что передается реальному методу, так как вы ничего не указали в 'cloudFile', я не могу сказать, что atm –
Я обновил свой вопрос, может быть, это может помочь вам немного –