当前位置: 首页 > 知识库问答 >
问题:

异常java.lang.NoClassDefoundError:org/aspectj/lang/annotation/aspect

谢志文
2023-03-14

我最近开始研究AspectJ并编写了一个用于日志记录的简单方面。

        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>1.7.1</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.7.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
        </dependency>
    null
05:59:18,325 ERROR [org.springframework.web.context.ContextLoader] (MSC service thread 1-15) Context initialization failed: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'calNamingBean' defined in ServletContext resource [/WEB-INF/helixservicebeans.xml]: BeanPostProcessor before instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: org/aspectj/lang/annotation/Aspect
                    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:452) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
                    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
                    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
                    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
                    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
                    at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:740) [spring-context-3.1.1.RELEASE.jar:3.1.1.RELEASE]
                    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:449) [spring-context-3.1.1.RELEASE.jar:3.1.1.RELEASE]
                    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:385) [spring-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
                    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:284) [spring-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
                    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111) [spring-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
                    at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:3392) [jbossweb-7.0.17.Final.jar:]
                    at org.apache.catalina.core.StandardContext.start(StandardContext.java:3850) [jbossweb-7.0.17.Final.jar:]
                    at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:89) [jboss-as-web-7.1.3.Final.jar:7.1.3.Final]
                    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811)
                    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746)
                    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_45]
                    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_45]
                    at java.lang.Thread.run(Thread.java:744) [rt.jar:1.7.0_45]
            Caused by: java.lang.NoClassDefFoundError: org/aspectj/lang/annotation/Aspect
                    at org.springframework.aop.aspectj.annotation.AbstractAspectJAdvisorFactory.hasAspectAnnotation(AbstractAspectJAdvisorFactory.java:119) [spring-aop-3.1.1.RELEASE.jar:3.1.1.RELEASE]
                    at org.springframework.aop.aspectj.annotation.AbstractAspectJAdvisorFactory.isAspect(AbstractAspectJAdvisorFactory.java:115) [spring-aop-3.1.1.RELEASE.jar:3.1.1.RELEASE]
                    at org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator.isInfrastructureClass(AnnotationAwareAspectJAutoProxyCreator.java:100) [spring-aop-3.1.1.RELEASE.jar:3.1.1.RELEASE]
                    at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessBeforeInstantiation(AbstractAutoProxyCreator.java:278) [spring-aop-3.1.1.RELEASE.jar:3.1.1.RELEASE]
                    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInstantiation(AbstractAutowireCapableBeanFactory.java:880) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]

https://stackoverflow.com/questions/33164216/load-time-weaving-with-aspectj-in-jboss-as-7-1

共有1个答案

南门宇
2023-03-14

maven项目中类似这样的NoClassDefoundError通常来自库冲突。问题中的信息不足,您只提供了pom的一个片段,而没有显示您正在使用的spring aspects的版本。您需要运行mvn dependency:tree并验证您使用的是所有aspectj依赖项的一致版本号。

编辑:肯定存在某种库冲突,因为您在问题中提到了spring-aspects 3.2.1.Release,但堆栈跟踪包含大量对Spring3.1.1.Release库的引用。

 类似资料:
  • 我试图使用Apache Commons Lang jar(commons-lang3-3.1-bin.zip)中的StringUtil类。 所以我将这个jar添加到我的类路径中,并运行了该程序。 当我运行代码时,我得到了一个异常,如 引起。 我使用java反编译程序打开了这个类,当我打开它时显示为 。除了这门课,其他的课都很好。

  • 如能提供任何帮助,我将不胜感激。 谢谢!

  • 但是,我想改变它,这样从域层抛出的异常将在AOP层中处理。AOP层会产生某种错误响应,并将其发送回spring控制器/web服务层。 我可以创建一个IBizResponse并创建它的两个子类/接口,可能是SuccessResponse和ErrorResponse,并使域层方法返回IBizResponse。但是,我不知道如何使AOP将ErrorResponse对象返回到服务层。

  • 本文向大家介绍Spring用AspectJ开发AOP(基于Annotation),包括了Spring用AspectJ开发AOP(基于Annotation)的使用技巧和注意事项,需要的朋友参考一下 基于 Annotation 的声明式 在 Spring 中,尽管使用 XML 配置文件可以实现 AOP 开发,但是如果所有的相关的配置都集中在配置文件中,势必会导致 XML 配置文件过于臃肿,从而给维护和

  • 我想用aspectJ应用注释。(使用Springboot 1.5.1,Mybatis 2.1.1) 因此,我制作了自定义注释和AspectJ…并应用它。 (此代码很简单,有问题) 如果切入点表达式应用“执行”,则这段代码在存储库(DAO)中运行良好..此外,如果切入点表达式应用了' @annotation ',则该代码也适用于其他组件(服务..控制器) 但是,为什么我不能用AspectJ在Repo

  • 我有@tenatable注释来决定切入点: 这是我的观点: 这对于这个服务类来说没有任何问题: 当我调用doSomething()方法时,我的方面正在运行,这没问题,但我想为属于spring数据的CrudRepository接口实现方面。 我已经改变了我的Aspect来实现这一点,如下所示: 这是存储库: 但当我调用MyRepository中的任何方法时,它都不起作用。 有什么办法吗? 编辑:当我