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

如果它不依赖于aspectj,为什么Spring会抛出aspectj错误?

宰父霖
2023-03-14

我正在尝试设置Spring AoP框架,但我不想依赖AspectJ,因此我将在一个bean xml配置文件中声明我的方面、建议等,类似于以下内容:

<bean id="systemAuthorizationsAspect" class="com.cp.pm.systemsettings.SystemAuthorizationsAspect" >
    <property name="sysAuthorizations" ref="authorizations" />
</bean>
<bean id="authorizations" class="com.hp.cp.pm.systemsettings.SystemAuthorizationsImpl">
    <property name="authSettingsRegistry" ref="systemSettingsRegistry" />
</bean>
<aop:config>
    <aop:aspect id="createPlanAspect" ref="systemAuthorizationsAspect">
         <aop:before pointcut="execution(* com.hp.cp.web.api.plan.PlanApi.createPlan(..))" method="authorizePlanCreation"/>
    </aop:aspect>
</aop:config>

每当我指定如上所述的切入点时,我都会收到以下错误:

BeanPostProcessor before instantiation of bean failed; 
nested exception is org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'org.springframework.aop.aspectj.AspectJPointcutAdvisor#0': 
Cannot create inner bean '(inner bean)' of type [org.springframework.aop.aspectj.AspectJMethodBeforeAdvice] while setting constructor argument; 
nested exception is org.springframework.beans.
factory.BeanCreationException: 
Error creating bean with name '(inner bean)': 
Cannot create inner bean '(inner bean)' of type [org.springframework.aop.aspectj.AspectJExpressionPointcut] while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name '(inner bean)': 
Instantiation of bean failed; nested exception is **java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException**

当我把aspectjweaver.jar.包括在内时,我可以做到这一点,但这不应该是这样。有什么想法吗?

提前谢谢

共有2个答案

林魁
2023-03-14

为了在不依赖AspectJ的情况下实现这一点,切入点不能使用ApsectJ表达式语言。

例如,在zagyi提供的链接中,以下代码使用AspectJ表达式语言声明了切入点:

<aop:config>
    <aop:aspect id="myAspect" ref="aBean">
    <aop:pointcut id="businessService"
      expression="execution(* com.xyz.myapp.service.*.*(..))"/>
</aop:aspect>

下一个代码块是普通的旧香草Spring AoP:

<aop:config>
<aop:pointcut id="businessService"
    expression="com.xyz.myapp.SystemArchitecture.businessService()"/>
</aop:config>

我的新问题是找到任何关于预期语法的文档。是否应该有返回类型?参数?等

越琦
2023-03-14

请参阅Spring文档启用@AspectJ支持:

可以使用XML或Java样式配置来启用@AsheJ支持。在这两种情况下,您还需要确保AsheJ的aspectjweaver.jar库位于应用程序的类路径上(版本1.6.8或更高版本)。

当然,如果您想使用aspectj提供的功能,您将需要一些aspectj库。然而,我想在运行时将它放在类路径上就足够了,所以您的项目不一定对这个jar有编译时依赖性。

 类似资料:
  • 问题内容: 首先让我注意,我使用AspectJ并且很喜欢它,但是我还能用它做什么呢。 我知道AspectJ可以用于日志记录。在某些情况下,它用于事务控制-大多与注释结合使用。像Spring Roo一样,AspectJ也可以用于通过(代码生成的)方法增强类。 但是我相信AspectJ和AOP通常可以用于以下方面:日志记录,事务控制和模拟子类。 那么,AspectJ和AOP还有哪些有用的用例呢? 问题

  • AspectJ意味着它的另一个AOP实现不是基于spring的,如果我们想使用它,那么除了spring之外,我们还需要包括一些第三方JAR。 Spring AOP注释意味着Spring使用AspectJ注释来提供AOP特性。 这些假设公平吗?

  • 在index.hpp中,我创建了一个具有多个数据成员的类,如、等。我在类外部定义了一个构造函数。在program.cpp中,我创建了一个名为SAM的对象。当我试图编译它时,它显示错误。什么原因? Program.cpp index.hpp 错误信息

  • 我有一个Java web应用程序myproject。war部署到JBoss。应用程序的一部分使用JNI连接到C DLL,后者从一组第三方库调用函数。我们正在将此应用程序从x32服务器迁移到x64服务器。 先前环境构建 32位Windows Server 2003 JBoss 6. X Java1.6. X 新环境构建 64位Windows Server 2008 R2,SP1(6.1.7601)

  • 我对AspectJ中的cflow或cflow有一个问题。 Cflow(切点) 在由切入点选择的连接点的控制流中选择所有连接点,包括切入点的连接点本身。 cflowbelow(切入点) 在切入点选择的连接点下方选择控制流中的所有连接点。 对于两者,我只能找到定义,并且: 当使用cflow或cflowbelow定义切入点时,我们需要确保切入点不会捕获来自同一方面的调用,否则它将调用递归方法调用,我们将

  • 建议前: 运行主程序时出现异常(&R): 虽然当我在beforeAdvice()和afterAdvice()方法中给出切入点表达式时,删除切入点方法的所有操作都很好 使用的Jar文件: 使用spring 3.1 Jar