2011-11-11 10 views
1

アスペクトを作成しましたが、動作していないようです。ログに何も表示されません。アスペクトを実行時に実行しない(Spring 3、AspectJ)

リポジトリは、SpringによってAutowiredを別のBeanに取得します。これは、コンポーネントスキャンが機能するように機能します。アスペクトはスキャン中のパッケージ内にあります。私はclasspathにaspectjを持っています。

アスペクト比:

@Aspect 
@Component 
public class LoggingAspect { 

    private static Logger logger = Logger.getLogger(LoggingAspect.class); 

    @Before("execution(* nl.bar.repository.*.*(..))") 
    public void logIt(JoinPoint joinPoint) { 
     logger.debug("WE'RE LOGGING IT!!!!");  
    } 
} 

スプリングビーン:

package nl.bar.repository 

@Component 
public class BarRepository { 

    public List<Bar> findBar() { 
     .... 
    } 
} 

のApplicationContext:

<context:annotation-config /> 
<context:component-scan base-package="nl.bar" /> 
<aop:aspectj-autoproxy/> 

のMaven:

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-aop</artifactId> 
    <version>2.5.6</version> 
</dependency> 
<dependency> 
<groupId>org.aspectj</groupId> 
    <artifactId>aspectjrt</artifactId> 
    <version>1.6.11</version> 
</dependency> 
<dependency> 
    <groupId>org.aspectj</groupId> 
    <artifactId>aspectjweaver</artifactId> 
    <version>1.6.11</version> 
</dependency> 

答えて

1

spring-contextを指定しないとコードがコンパイルされないため、Mavenの依存関係のいくつかを残しておく必要があります。 spring-contextを追加すると、コードはそのまま動作します。

私の推測は間違っています:アスペクトパッケージ/クラスのログレベルはデバッグに設定されていません。ここで

は、本質的に何も変更せずに私のバージョン、およびいくつかの成功出力、です:

<dependencies> 
    <dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-context</artifactId> 
    <version>2.5.6</version> 
    </dependency> 

    <dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-aop</artifactId> 
    <version>2.5.6</version> 
    </dependency> 

    <dependency> 
    <groupId>org.aspectj</groupId> 
    <artifactId>aspectjrt</artifactId> 
    <version>1.6.11</version> 
    </dependency> 

    <dependency> 
    <groupId>org.aspectj</groupId> 
    <artifactId>aspectjweaver</artifactId> 
    <version>1.6.11</version> 
    </dependency> 

    <dependency> 
    <groupId>log4j</groupId> 
    <artifactId>log4j</artifactId> 
    <version>1.2.16</version> 
    </dependency> 
</dependencies> 

applicationContext.xmlファイルは私のリポジトリクラス以外のJavaを、同じように単純で、変わら:

@Component("repo") 
public class BarRepository implements Repo { 
    public String findBar() { 
     return "Hello!"; 
    } 
} 

mainのサニティチェック:

public static void main(String[] args) { 
    LOG.debug("Initializing context..."); 
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); 

    LOG.debug("Retrieving bean..."); 
    Repo repo = (Repo) context.getBean("repo"); 

    LOG.debug("Calling bean..."); 
    System.out.println(repo.findBar()); 
} 

私はINFODEBUGorg.springframework.aopログで次の出力を取得し、私のアスペクトクラス:

DEBUG nl.main.Main - Initializing context... 
INFO org.springframework.context.support.ClassPathXmlApplicationContext - Refreshing org[email protected]1125127: display name [org[email protected]1125127]; startup date [Sat Nov 12 16:39:45 EST 2011]; root of context hierarchy 
INFO org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [applicationContext.xml] 
INFO org.springframework.context.support.ClassPathXmlApplicationContext - Bean factory for application context [org[email protected]1125127]: org.s[email protected]89cc5e 
INFO org.springframework.beans.factory.support.DefaultListableBeanFactory - Pre-instantiating singletons in org.s[email protected]89cc5e: defining beans [org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,repo,loggingAspect,org.springframework.aop.config.internalAutoProxyCreator]; root of factory hierarchy 
DEBUG org.springframework.aop.aspectj.annotation.ReflectiveAspectJAdvisorFactory - Found AspectJ method: public void nl.bar.aspects.LoggingAspect.logIt(org.aspectj.lang.JoinPoint) 
DEBUG org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator - Creating implicit proxy for bean 'repo' with 0 common interceptors and 2 specific interceptors 
DEBUG org.springframework.aop.framework.JdkDynamicAopProxy - Creating JDK dynamic proxy: target source is SingletonTargetSource for target object [[email protected]] 
DEBUG nl.main.Main - Retrieving bean... 
DEBUG nl.main.Main - Calling bean... 
INFO nl.bar.aspects.LoggingAspect - WE'RE LOGGING IT!!!! 
Hello! 

私はそれがいずれかのログレベルの問題だ、またはあなたはそれだと思うようにそれが必要ので、それは、コンパイルしていない賭けています書かれたとおりに働くこと。

関連する問題