Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cat' defined in class path resource [hvp/spring/aspectj/complex/beans.xml]: BeanPostProcessor before instantiation of bean failed; nested exception is java.lang.IllegalStateException: Returning argument name 'retVal' was not bound in advice arguments
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:405)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:221)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:729)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:381)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at hvp.spring.aspectj.complex.AdviceComplexTest.main(AdviceComplexTest.java:12)
Caused by: java.lang.IllegalStateException: Returning argument name 'retVal' was not bound in advice arguments
at org.springframework.aop.aspectj.AbstractAspectJAdvice.bindExplicitArguments(AbstractAspectJAdvice.java:476)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.bindArgumentsByName(AbstractAspectJAdvice.java:426)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.calculateArgumentBindings(AbstractAspectJAdvice.java:377)
at org.springframework.aop.aspectj.annotation.ReflectiveAspectJAdvisorFactory.getAdvice(ReflectiveAspectJAdvisorFactory.java:218)
at org.springframework.aop.aspectj.annotation.InstantiationModelAwarePointcutAdvisorImpl.instantiateAdvice(InstantiationModelAwarePointcutAdvisorImpl.java:145)
at org.springframework.aop.aspectj.annotation.InstantiationModelAwarePointcutAdvisorImpl.<init>(InstantiationModelAwarePointcutAdvisorImpl.java:94)
at org.springframework.aop.aspectj.annotation.ReflectiveAspectJAdvisorFactory.getAdvisor(ReflectiveAspectJAdvisorFactory.java:134)
at org.springframework.aop.aspectj.annotation.ReflectiveAspectJAdvisorFactory$1.doWith(ReflectiveAspectJAdvisorFactory.java:74)
at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:435)
at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:412)
at org.springframework.aop.aspectj.annotation.ReflectiveAspectJAdvisorFactory.getAdvisors(ReflectiveAspectJAdvisorFactory.java:70)
at org.springframework.aop.aspectj.annotation.BeanFactoryAspectJAdvisorsBuilder.buildAspectJAdvisors(BeanFactoryAspectJAdvisorsBuilder.java:110)
at org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator.findCandidateAdvisors(AnnotationAwareAspectJAutoProxyCreator.java:85)
at org.springframework.aop.aspectj.autoproxy.AspectJAwareAdvisorAutoProxyCreator.shouldSkip(AspectJAwareAdvisorAutoProxyCreator.java:105)
at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessBeforeInstantiation(AbstractAutoProxyCreator.java:281)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInstantiation(AbstractAutowireCapableBeanFactory.java:791)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.resolveBeforeInstantiation(AbstractAutowireCapableBeanFactory.java:762)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:399)
... 13 more
///////////////////////////////////////////////////////
定义的返回参数的名字和增强的参数名称不一致,就会抛出此异常..
分享到:
相关推荐
在本篇博文中,我们将深入探讨Spring AOP(面向切面编程)中的一个重要概念——AfterReturning通知,这是Spring框架提供的一种强大的功能,允许我们在方法成功执行并返回后执行额外的操作。我们将通过源码分析和实际...
我们可以通过实现`AfterReturningAdvice`接口并定义一个`afterReturning`方法来创建此类通知。这个方法接收四个参数:返回值、目标对象、方法名和方法参数,这使得我们可以访问方法执行的所有相关信息。 2. **...
3. **编写通知(Advice)**:使用`@Before`、`@After`、`@AfterReturning`、`@AfterThrowing`注解定义不同的通知类型。 4. **配置AOP**:在Spring配置文件中启用AOP支持,并将切面类注册为bean。 通过以上步骤,...
2. **异常处理**:Spring默认只有在方法抛出未捕获的运行时异常时才会回滚事务。如果捕获了异常并处理,事务可能不会按预期回滚。为确保事务正确回滚,可以显式地抛出`TransactionException`或者使用`@Transactional...
`@Aspect`注解标记一个切面类,而`@Before`、`@After`、`@Around`、`@AfterThrowing`和`@AfterReturning`这些注解则定义了通知的执行时机。 **Redis**是一种高性能的键值数据库,常用于缓存和消息中间件。在Spring ...
包括前置通知(Before)、后置返回通知(After Returning)、异常通知(After Throwing)、后置通知(After)和环绕通知(Around)。 14. **Spring中的事件驱动编程是什么?** Spring支持事件驱动编程,允许应用...
2. 返回后通知(After Returning Advice):在方法正常返回后执行,使用`@AfterReturning`注解。 3. 抛出异常后通知(After Throwing Advice):当方法抛出异常退出时执行,使用`@AfterThrowing`注解。 4. 后置通知...
6. **注解使用**:如 @Aspect、@Before、@After、@Around、@AfterReturning、@AfterThrowing,它们使得切面编程更加简洁。 **Spring IOC 知识点:** 1. **控制反转(Inversion of Control)**:传统模式下,对象...
在Spring配置中,你可以使用`@Aspect`注解来标记一个类作为切面,然后使用`@Before`, `@After`, `@AfterReturning`, `@AfterThrowing`, `@Around`这些注解来定义具体的通知。例如: ```java @Aspect public class ...
`@Aspect` 注解定义了一个切面,`@Before`, `@After`, `@Around`, `@AfterReturning`, 和 `@AfterThrowing` 注解则分别用于定义前置、后置、环绕、后返回和异常处理通知。 在Web层,Spring 3.0 提供了对RESTful Web...
Spring AOP支持五种类型的通知:前置通知(Before)、后置通知(After)、返回后通知(After Returning)、异常后通知(After Throwing)和环绕通知(Around)。 3. **切点(Pointcut)**:切点是程序执行过程中的...
使用`@Before`、`@After`、`@AfterReturning`、`@AfterThrowing`和`@Around`注解定义不同的通知,例如: ```java @AfterReturning("execution(* com.example.service.*.*(..))") public void logAfterServiceCall()...
1. 注解驱动的切面:使用`@Aspect`注解定义一个类作为切面,然后在类内部使用`@Before`, `@After`, `@AfterReturning`, `@AfterThrowing` 和 `@Around` 注解定义通知。切点表达式可以在注解中直接写,或者通过`@...
Spring还提供了`@AfterReturning`、`@AfterThrowing`和`@After`注解来分别处理正常返回、抛出异常和无论是否抛出异常后执行的代码。环绕通知则需要使用`@Around`注解,并且需要手动调用`ProceedingJoinPoint`的`...
`@AfterReturning`注解的方法会在目标方法正常执行完毕并返回后调用,可以访问到返回值。 ```java @Aspect public class ReturnLoggingAspect { @AfterReturning(pointcut = "execution(* com.example.service....
@Aspect、@Before、@After、@AfterReturning、@AfterThrowing、@Around和@Pointcut等注解是这一部分的重点。 综上所述,这次的学习涵盖了Spring的核心模块,包括Bean管理、AOP代理、面向切面编程以及注解驱动的AOP...
Spring支持五种不同类型的通知:前置通知(Before)、后置通知(After)、返回后通知(After Returning)、异常后通知(After Throwing)和环绕通知(Around)。 3. 连接点(Join Point):连接点是在程序执行过程...
- 返回后通知(After Returning):在目标方法正常返回后执行。 - 异常后通知(After Throwing):在目标方法抛出异常后执行。 - 最终通知(After Finally):无论目标方法是否抛出异常,最终都会执行。 2. **...
4. 使用`@Before`, `@After`, `@AfterReturning`, `@AfterThrowing`或`@Around`注解将通知方法绑定到相应的切点。 对于那些希望避免使用XML配置的开发者,Spring 3.0.5引入了基于注解的AOP配置。只需在Spring配置类...