Java Spring AOP记录器

时间:2016-08-02 06:35:02

标签: java spring aop

我有以下几个方面:

@Component
@Aspect
public class LoggingAspect {

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

    @AfterReturning(pointcut = "execution(* com.example..*.*(..))", returning = "retVal")
    public void logAfterMethod(JoinPoint joinPoint, Object retVal) {
        StringBuffer logMessage = new StringBuffer();
        logMessage.append(joinPoint.getTarget().getClass().getName());
        logMessage.append(".");
        logMessage.append(joinPoint.getSignature().getName());
        logMessage.append("(");
        // append args
        Object[] args = joinPoint.getArgs();
        for (int i = 0; i < args.length; i++) {
            logMessage.append(args[i]).append(",");
        }
        if (args.length > 0) {
            logMessage.deleteCharAt(logMessage.length() - 1);
        }

        logMessage.append(")");
        if (retVal != null) {
            logMessage.append(" with return value " + retVal + " of type "
                    + retVal.getClass());
        } else {
            logMessage.append(" with return value null");
        }
        logger.info(logMessage);
    }

}

然后是以下bean:

@Bean
    public LoggingAspect logger(){
        return new LoggingAspect();
    }

但每当我想运行我的应用程序时它会给我错误,我已经google了但是找不到任何相关的问题,也许我错过了一些东西://

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'embeddedServletContainerCustomizerBeanPostProcessor': BeanPostProcessor before instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration': BeanPostProcessor before instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration': BeanPostProcessor before instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException
Caused by: java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException
Caused by: java.lang.ClassNotFoundException: org.aspectj.weaver.reflect.ReflectionWorld$ReflectionWorldException

1 个答案:

答案 0 :(得分:2)

主要原因是:nested exception is java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld

这意味着您必须将aspectjweaver.jar添加到类路径中。

如果您使用maven,请将依赖项添加到您的pom.xml:

<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.8.9</version>
</dependency>