2013-05-30 5 views
0

Я использую проект 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()); 
    } 
} 

ответ

0

Вы должны включить AspectJ в конфигурации яровой (сканировать автомагически аннотации)

<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:aop="http://www.springframework.org/schema/aop" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
xmlns:context="http://www.springframework.org/schema/context" 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
http://www.springframework.org/schema/aop 
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

    <context:component-scan base-package="..."/> 
    <aop:aspectj-autoproxy /> 
    ... 
</beans> 

Может быть, вы nedd к spring-aop зависимости для вашего проекта тоже.

Смежные вопросы