Я использую проект Spring-security, чтобы попробовать реализацию сервера OAuth2. Я клонировал проект git от https://github.com/SpringSource/spring-security-oauth.Добавление AspectJ к существующему проекту
Этот пример работает как задокументированный. Теперь, чтобы отслеживать поток, я хочу добавить функцию ввода/выхода функции с помощью АОП в существующий код. Для этого я сделал следующие изменения:
- Добавлен класс "Watcher.java" (код ниже)
Добавлено AspectJ зависимостей в pom.xml
<dependency> <groupId>aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.5.3</version> </dependency> <dependency> <groupId>aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.5.3</version> </dependency>
Проект строит и запускает
- Но не видят маркеры AspectJ для каждой функции
Можно ли добавить запись входа/выхода функции с помощью этого метода, не меняя большую часть исходного кода?
Watcher.java:
package org.springframework.security.oauth.examples.sparklr;
import java.util.Arrays;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
@Aspect
public class Watcher {
@Pointcut("execution(* *(..))")
public void watch() {
}
@Before("watch()")
public void preWatch(JoinPoint joinPoint) {
if (joinPoint.getArgs().length > 0) {
String[] args = new String[joinPoint.getArgs().length];
System.arraycopy(joinPoint.getArgs(), 0, args, 0,
joinPoint.getArgs().length);
System.out.println("-> " + joinPoint.toShortString()
+ Arrays.toString(joinPoint.getArgs()));
} else {
System.out.println("-> " + joinPoint.toShortString());
}
System.out.println("Args: " + joinPoint.getArgs().length);
}
@AfterReturning("watch()")
public void postWatch(JoinPoint joinPoint) {
System.out.println("<- " + joinPoint.toShortString());
}
}