`

spring aspectj的返回值

阅读更多
最近使用到了基于aspectj的spring aop, aop是spring的核心之一, 重要性自必不多言, 而使用aspectj在spring中的应用让我们的开发工作量降低了不少, 不过里面有一点在spring的reference中没有提到, 而且这一点我觉得是非常重要的, 因为这个问题导致我在开发中郁闷了好久, 就是返回值的问题, 当使用Around Advice的时候, 被around的方法如果是有返回值的, 那么在使用ProceedingJoinPoint 的时候一定要有返回值, 比如这样写:
@Around("com.xyz.myapp.SystemArchitecture.businessService()")
  public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {
	// start stopwatch
	Object retVal = pjp.proceed();
	// stop stopwatch
	return retVal;
  }

否则就会抛出NullPointerException, 就像下面的堆栈信息:
引用
java.lang.NullPointerException
at $Proxy6.deleteDocument(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)

由于spring内部采用cglib动态生成了一些类, 因此调试的时候也看不到源码, 给查找问题又带来了困难
分享到:
评论
1 楼 jake0719 2009-06-29  
cglib生成的只是代理类, 把断点打在所代理的实体类里面不还是可以debug到你的class的么?

相关推荐

    Spring 使用AspectJ 实现 AOP

    在Spring中,我们可以使用AspectJ来实现AOP,AspectJ是一个强大的AOP框架,它可以与Spring无缝集成,提供更细粒度的控制。 首先,让我们了解一下AOP中的通知类型: 1. **前置通知**(Before Advice):在目标方法...

    Spring AOP + AspectJ annotation example

    AspectJ是Spring AOP支持的一种强大的、独立的AOP语言,它提供了注解来简化切面的定义。本篇将深入探讨如何结合Spring AOP和AspectJ注解进行实践。 首先,我们需要理解AOP的基本概念。面向切面编程是一种编程范式,...

    Spring AOP之基于AspectJ注解总结与案例

    本篇内容将对Spring AOP中基于AspectJ注解的使用进行总结,并通过实际案例进行解析。 首先,让我们理解AspectJ注解在Spring AOP中的核心概念: 1. **@Aspect**: 这个注解用于定义一个类为切面,这个类将包含切点和...

    aspectj.pdf

    描述:Spring AOP aspectj 知识点详解: ### 一、AspectJ简介 AspectJ是由Xerox PARC开发的一种面向切面编程(AOP)工具,旨在为程序员提供一种处理横切关注点(cross-cutting concerns)的方法。AspectJ于1998年...

    Spring_AOP_学习小结 Spring_AOP_学习小结 Spring_AOP_学习小结

    在Spring 2.0及更高版本中,推荐使用AspectJ注解或XML配置定义切入点表达式。 总结,Spring AOP提供了一种优雅的方式,让我们能够分离关注点,实现代码的模块化,提高可维护性和复用性。理解并熟练运用这些概念和...

    springboot spring aop 拦截器注解方式实现脱敏

    在Spring Boot应用中,Spring AOP(面向切面编程)是一种强大的工具,它允许我们创建横切关注点,如日志记录、权限检查等,这些关注点可以被编织到应用程序的多个点上,而无需侵入核心业务逻辑。在本案例中,我们将...

    简单spring aop 例子

    通过这些,你可以实现更精细的控制,如只对特定方法、异常或返回值进行拦截。 标签“源码”和“工具”暗示这个示例可能包含了具体代码实现和使用工具的指导。在SpringAopDemo压缩包中,应该包含了上述提到的所有类...

    Spring中AOP实现EHCache的整合中采用SpringModule结合(二)

    在这个例子中,我们将使用`@Cacheable`注解,它会将方法的返回值存储在缓存中,下次调用相同方法时,直接从缓存中获取结果,从而提高性能。 ```java import org.aspectj.lang.annotation.Aspect; import org.spring...

    spring-framework-4.3.14.RELEASE-docs.zip

    `org.springframework.aop.aspectj.annotation.AspectJProxyFactory`则支持基于AspectJ的AOP编程。 - **数据访问API**:包括`org.springframework.jdbc.core.JdbcTemplate`和`org.springframework.orm.hibernate5....

    Spring Framework Api.zip

    在Spring Framework API中,每个类和方法都有详细的说明,包括参数、返回值、异常等信息,是学习和使用Spring的重要参考资料。例如,`BeanFactory`接口是bean容器的基础,`ApplicationContext`继承自`BeanFactory`,...

    官方 Spring4.0 jar包

    @AspectJ注解使得AOP的使用更加直观和简洁。 3. **Spring MVC**:作为Spring的Web开发模块,Spring MVC在4.0版本中提升了性能,并增强了对RESTful服务的支持。@RequestMapping注解允许更灵活地映射HTTP请求,@...

    spring4.3.2依赖jar和api

    7. **Maven依赖**:Spring 4.3.2发布包通常会包含所有必要的jar文件,包括Spring的核心模块和其他依赖,如AspectJ、 Commons Logging等。开发者可以将这些jar添加到自己的项目中,或者通过Maven或Gradle等构建工具...

    Spring.3.x企业应用开发实战(完整版).part2

    Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。  Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架...

    spring aop实例annotation方法实现

    为了启用注解驱动的AOP,需要在Spring配置文件中添加`<aop:aspectj-autoproxy>`元素,或者在Java配置中使用`@EnableAspectJAutoProxy`注解。 ```xml <aop:aspectj-autoproxy /> ``` 或者 ```java @Configuration ...

    Spring 使用注解来实现通知

    虽然Spring默认使用运行时织入,但通过AspectJ的编译时织入,可以在编译阶段就将切面逻辑编织到目标类中,提高性能。 9. **自动代理** Spring AOP会自动创建代理对象来实现切面功能,对于基于接口的类,它通常...

    Spring中文文档.rar

    API文档详细介绍了每个类的职责、方法签名、参数以及返回值,有助于理解和使用Spring的核心组件,如IoC容器、数据访问/集成、Web层支持、AOP、任务调度等。 "Spring 中文开发手册.pdf"可能是一部全面介绍Spring开发...

    Spring的aopjar包

    前者在对象被创建时创建代理对象,后者则在类加载阶段进行编织,通常在使用JDK动态代理或CGLIB时采用前者,在使用AspectJ时采用后者。 `aop`和`aspects`涉及的是Spring AOP的实现和使用。`aop`模块包含了Spring AOP...

    spring注解aop配置详解

    // 返回值日志记录 } // 其他通知... } ``` 在上述代码中,`@Before`注解的方法会在目标方法执行前运行,`@AfterReturning`注解的方法则在目标方法正常返回后运行。切入点表达式`execution(* ...

    spring配置文件----注解配置

    `@Configuration`表示当前类是一个配置类,而`@Bean`则标记方法,该方法的返回值会被注册为一个Spring bean。 6. `@Scope`: 用于定义bean的作用域,如单例(`singleton`)、原型(`prototype`)等。 7. `@Import`: ...

Global site tag (gtag.js) - Google Analytics