簡體   English   中英

Aspect在運行時不執行(Spring 3,AspectJ)

[英]Aspect not excecuting at runtime (Spring 3, AspectJ)

我已經創建了一個Aspect,但是它似乎無法正常工作,在日志中什么也看不到,也沒有錯誤消息或任何對我有幫助的內容。

Spring將該存儲庫自動連線到另一個bean,該bean工作正常,因此可以進行組件掃描。 Aspect處於要掃描的程序包內部。 我在類路徑上有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>

您必須遺漏一些Maven依賴項,因為如果沒有spring-context則不應編譯代碼。 添加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>

除了Java庫類是簡單的之外, 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());
}

我在DEBUG記錄了org.springframework.aop的以下輸出,在INFO看到了我的長寬比類:

DEBUG nl.main.Main - Initializing context...
INFO  org.springframework.context.support.ClassPathXmlApplicationContext - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@1125127: display name [org.springframework.context.support.ClassPathXmlApplicationContext@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.springframework.context.support.ClassPathXmlApplicationContext@1125127]: org.springframework.beans.factory.support.DefaultListableBeanFactory@89cc5e
INFO  org.springframework.beans.factory.support.DefaultListableBeanFactory - Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@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 [nl.bar.repository.BarRepository@1dec1dd]
DEBUG nl.main.Main - Retrieving bean...
DEBUG nl.main.Main - Calling bean...
INFO  nl.bar.aspects.LoggingAspect - WE'RE LOGGING IT!!!!
Hello!

我敢打賭這可能是日志級別的問題,或者不是您想的那樣編譯,因為它應該按書面規定工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM