首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >添加@Aspect抛出BeanCreationException

添加@Aspect抛出BeanCreationException
EN

Stack Overflow用户
提问于 2020-07-15 22:35:25
回答 1查看 98关注 0票数 0

我正在尝试在Spring中使用AOP。当我在XML中使用旧的DTD方法时,一切都很正常。但是,当我尝试使用AspectJ表示法时,我遇到了一些问题。我从here下载了aspectj的JAR文件。我将它们添加到构建路径中,并成功编译了包含@Aspect注释的代码。但在运行时,什么都不会执行。即使是使用基于XML配置的方面的bean,也不会被创建。它抛出了一些BeanCreationException。完整的错误日志如下:

代码语言:javascript
复制
WARNING: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'emp1' defined in class path resource [Beans.xml]: BeanPostProcessor before instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'emp1' defined in class path resource [Beans.xml]: BeanPostProcessor before instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:512)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:879)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:878)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:144)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:85)
    at com.demo.Tester.main(Tester.java:11)
Caused by: java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException
    at org.springframework.aop.aspectj.annotation.ReflectiveAspectJAdvisorFactory.getPointcut(ReflectiveAspectJAdvisorFactory.java:210)
    at org.springframework.aop.aspectj.annotation.ReflectiveAspectJAdvisorFactory.getAdvisor(ReflectiveAspectJAdvisorFactory.java:192)
    at org.springframework.aop.aspectj.annotation.ReflectiveAspectJAdvisorFactory.getAdvisors(ReflectiveAspectJAdvisorFactory.java:126)
    at org.springframework.aop.aspectj.annotation.BeanFactoryAspectJAdvisorsBuilder.buildAspectJAdvisors(BeanFactoryAspectJAdvisorsBuilder.java:110)
    at org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator.findCandidateAdvisors(AnnotationAwareAspectJAutoProxyCreator.java:95)
    at org.springframework.aop.aspectj.autoproxy.AspectJAwareAdvisorAutoProxyCreator.shouldSkip(AspectJAwareAdvisorAutoProxyCreator.java:101)
    at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessBeforeInstantiation(AbstractAutoProxyCreator.java:251)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInstantiation(AbstractAutowireCapableBeanFactory.java:1141)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.resolveBeforeInstantiation(AbstractAutowireCapableBeanFactory.java:1114)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:506) ... 10 more
Caused by: java.lang.ClassNotFoundException: org.aspectj.weaver.reflect.ReflectionWorld$ReflectionWorldException
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)

有人能帮我找出错误所在吗?据我所知,JVM无法找到@Aspect注释,但为什么在添加JAR文件后仍会发生这种情况?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-16 08:37:29

你有一个奇怪的网站来下载JAR。我建议不要手动下载依赖JAR,而是使用像Maven这样的构建工具来为您解决这个问题。无论如何,如果你想让你的开发者生活变得更困难,你可以手动去做。您可以在此处搜索和下载依赖项:

https://mvnrepository.com/artifact/org.aspectj/aspectjweaver

只需搜索,选择您需要的版本,然后下载。

出现问题的原因是,从您的链接URL猜测,您下载了AspectJ运行时库aspectjrt.jar,但该库是最小的库,并打算与ApsectJ编译时编织一起使用。您正在使用Spring AOP,它依赖于AspectJ加载时编织库aspectjweaver.jar。把它放在你的类路径上,然后你的错误就会消失。顺便说一句,weaver库包含运行时类的超集,因此在这种情况下您不再需要运行时。

我还建议阅读更多的文档。Spring手册告诉你使用编织器,而不是运行时,请参阅Enabling @AspectJ Support一章。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62917394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档