Как залогировать свой код так, чтобы не превратить его в лапшу? Оптимально хотелось бы вообще не вносить никаких изменений в бизнес логику. Например у нас есть следующий код. Нам надо логировать входные и выходные данные метода logic.
package com.bssys.aspect;
public class MainApp {
private String account;
public String logic(String account) {
return "Hello:" + account;
}
public static void main(String arg[]) {
MainApp mainApp = new MainApp();
String request = "O-o";
String response = mainApp.logic(request);
}
}
package com.bssys.aspect;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
@Aspect
public class EasyAspect {
@Before("execution(* com.bssys.aspect.MainApp.logic(..))")
public void beforePrintlnCall(JoinPoint joinPoint) {
System.out.println(joinPoint.getArgs()[0]);
}
@AfterReturning(pointcut="execution(* com.bssys.aspect.MainApp.logic(..))", returning = "retVal")
public void afterPrintlnCall(Object retVal) {
System.out.println(retVal);
}
}
Аннотация @Before задает точку прикрепления аспекта. Как не трудно догадаться аннотируемый метод будет вызываться перед выполнением метода com.bssys.aspect.MainApp.logic(..)
@Before("execution(* com.bssys.aspect.MainApp.logic(..))")
Аннотация @AfterReturning задает точку прикрепления аспекта. В метод помеченный этой аннотацией будет передаваться результат выполнения метода com.bssys.aspect.MainApp.logic(..)
@AfterReturning(pointcut="execution(* com.bssys.aspect.MainApp.logic(..))", returning = "retVal")
Теперь чтобы AspectJ мог использовать мой аспект необходимо в проекте создать xml-файл в каталоге META-INF.
<?xml version="1.0"?>
<aspectj>
<aspects>
<aspect name="com.bssys.aspect.EasyAspect">
</aspect></aspects>
</aspectj>
Остался еще один момент, в настройках запуска приложения необходимо прописать следующие свойства, чтобы аспект мог работать -javaagent:lib/aspectjweaver.jar
Ну а вот так выглядит вся структура проекта в Eclipse.
2 комментария:
сделал аспект. подгрузил аспектJ через мавен. создал мета инф. создал aop.xml
не создавал aop.out.xml
не знаю где указывать этот параметр для запуска (у меня IDEA)
не работает.
В параметрах запуска. Фактически сделать следующее:
java -javaagent:lib/aspectjweaver.jar com.bssys.aspect.MainApp
Отправить комментарий