方面不在运行时执行(Spring 3,AspectJ)

时间:2011-11-11 12:19:54

标签: java spring annotations aop aspectj

我创建了一个Aspect但它似乎没有工作,我在日志中看不到任何内容,也没有错误消息或日志中的任何帮助我的内容。

存储库被Spring自动装配到另一个bean中,这样可以使组件扫描工作。 Aspect位于正在扫描的包中。我在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!!!!");      
    }
}

Spring bean:

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 个答案:

答案 0 :(得分:1)

您必须省略一些Maven依赖项,因为没有spring-context代码不应该编译。添加spring-context,代码按原样运行。

这是我对错误的猜测:方面包/类的日志记录级别未设置为debug。

这是我的版本,以及一些成功的输出,基本上没有任何变化:

<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());
}

我通过org.springframework.aop的{​​{1}}和DEBUG的方面类获得了以下输出:

INFO

我认为这是一个日志级问题,或者它没有像你想象的那样编译,因为它应该按照书面形式工作。