В Spring AOP вы можете регистрировать эти классы только в том случае, если они используются в качестве Spring Beans, и даже тогда вы можете регистрировать только выполнение открытых методов.
Вот аспект в уведомлении @AspectJ (это стилькоторый совместим как с «настоящим AspectJ», так и с Spring AOP, прочитайте о разнице в ссылочном коде пружины ), которую вы можете использовать при переплетении байтов кода Spring AOP и AspectJ:
@Aspect
public class LoggingAspect{
@Pointcut("execution(* com.mycompany.myproject.*.*(..))")
public void methodToLog(){
};
@Around("methodToLog()")
public Object logMethod(final ProceedingJoinPoint joinPoint) throws Throwable{
final StaticPart staticPart = joinPoint.getStaticPart();
final String sig =
"" + staticPart.getSignature() + " with args: "
+ Arrays.deepToString(joinPoint.getArgs());
System.out.println("Entering method " + sig);
final Object result = joinPoint.proceed();
System.out.println("Leaving method " + sig);
return result;
}
}
Вот глупый класс с некоторыми методами:
package com.mycompany.myproject;
public class Dummy1{
public static void main(final String[] args){
final Dummy1 dummy = new Dummy1();
dummy.doSomeStuff();
dummy.doSomeStuffWithSomeArgs("Hello", 123);
}
private void doSomeStuff(){}
public void doSomeStuffWithSomeArgs(final String firstArg,
final int secondArg){}
}
Когда вы запускаете этот класс в Eclipse / AJDT как приложение Java / AspectJ, вы получаете следующий вывод:
Entering method void com.mycompany.myproject.Dummy1.main(String[]) with args: [[]]
Entering method void com.mycompany.myproject.Dummy1.doSomeStuff() with args: []
Leaving method void com.mycompany.myproject.Dummy1.doSomeStuff() with args: []
Entering method void com.mycompany.myproject.Dummy1.doSomeStuffWithSomeArgs(String, int) with args: [Hello, 123]
Leaving method void com.mycompany.myproject.Dummy1.doSomeStuffWithSomeArgs(String, int) with args: [Hello, 123]
Leaving method void com.mycompany.myproject.Dummy1.main(String[]) with args: [[]]
Toтестирование этого в Spring AOP потребует больше работы (подход основного метода не будет работать, вам придется создать ApplicationContext и зарегистрировать бин типа Dummy1, для которого вы будете вызывать методы), поэтому я оставлю это длявы, но я уверен, что вызов частного метода не будет зарегистрирован.
Если вы загрузите SpringSource Tool Suite , вы получите хорошие инструменты дляr аспект визуализации и тестирования.Вам также следует прочитать книгу AspectJ , даже если вы хотите использовать только Spring AOP.Это отличная книга.
Кстати: вам наверняка захочется использовать настоящий регистратор, а не system.out.Вы можете либо определить один для каждого аспекта, либо (только с реальным аспектом j) вы можете представить его как статический член в целевом классе для получения регистрации каждого класса.На мой взгляд, убийственная особенность AspectJ.