`

spring aop 附带测试实例

    博客分类:
  • java
 
阅读更多
《Spring参考手册》中定义了以下几个AOP的重要概念,结合以上代码分析如下:

切面(Aspect)
官方的抽象定义为“一个关注点的模块化,这个关注点可能会横切多个对象”,在本例中,“切面”就是类TestAspect所关注的具体行为,例如,AServiceImpl.barA()的调用就是切面TestAspect所关注的行为之一。“切面”在ApplicationContext中<aop:aspect>来配置。
连接点(Joinpoint)
程序执行过程中的某一行为,例如,AServiceImpl.barA()的调用或者BServiceImpl.barB(String _msg, int _type)抛出异常等行为。
通知(Advice)
“切面”对于某个“连接点”所产生的动作,例如,TestAspect中对com.spring.service包下所有类的方法进行日志记录的动作就是一个Advice。其中,一个“切面”可以包含多个“Advice”,例如TestAspect
切入点(Pointcut)
匹配连接点的断言,在AOP中通知和一个切入点表达式关联。例如,TestAspect中的所有通知所关注的连接点,都由切入点表达式execution(* com.spring.service.*.*(..))来决定
目标对象(Target Object)
被一个或者多个切面所通知的对象。例如,AServcieImpl和BServiceImpl,当然在实际运行时,Spring AOP采用代理实现,实际AOP操作的是TargetObject的代理对象。
AOP代理(AOP Proxy)
在Spring AOP中有两种代理方式,JDK动态代理和CGLIB代理。默认情况下,TargetObject实现了接口时,则采用JDK动态代理,例如,AServiceImpl;反之,采用CGLIB代理,例如,BServiceImpl。强制使用CGLIB代理需要将 <aop:config> 的 proxy-target-class 属性设为true
       通知(Advice)类型

前置通知(Before advice) :在某连接点(JoinPoint)之前执行的通知,但这个通知不能阻止连接点前的执行。ApplicationContext中在<aop:aspect>里面使用<aop:before>元素进行声明。例如,TestAspect中的doBefore方法
后通知(After advice) :当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。ApplicationContext中在<aop:aspect>里面使用<aop:after>元素进行声明。例如,TestAspect中的doAfter方法,所以AOPTest中调用BServiceImpl.barB抛出异常时,doAfter方法仍然执行
返回后通知(After return advice) :在某连接点正常完成后执行的通知,不包括抛出异常的情况。ApplicationContext中在<aop:aspect>里面使用<after-returning>元素进行声明。
环绕通知(Around advice) :包围一个连接点的通知,类似Web中Servlet规范中的Filter的doFilter方法。可以在方法的调用前后完成自定义的行为,也可以选择不执行。ApplicationContext中在<aop:aspect>里面使用<aop:around>元素进行声明。例如,TestAspect中的doAround方法。
抛出异常后通知(After throwing advice)
在方法抛出异常退出时执行的通知。 ApplicationContext中在<aop:aspect>里面使用<aop:after-throwing>元素进行声明。例如,TestAspect中的doThrowing方法。
切入点表达式

•通常情况下,表达式中使用”execution“就可以满足大部分的要求。表达式格式如下:
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)  

modifiers-pattern:方法的操作权限

ret-type-pattern:返回值

declaring-type-pattern:方法所在的包

name-pattern:方法名

parm-pattern:参数名

throws-pattern:异常

其中,除ret-type-pattern和name-pattern之外,其他都是可选的。上例中,execution(* com.spring.service.*.*(..))表示com.spring.service包下,返回值为任意类型;方法名任意;参数不作限制的所有方法。

•通知参数
可以通过args来绑定参数,这样就可以在通知(Advice)中访问具体参数了。例如,<aop:aspect>配置如下

<aop:config>   
    <aop:aspect id="TestAspect" ref="aspectBean">   
        <aop:pointcut id="businessService"  
            expression="execution(* com.spring.service.*.*(String,..)) and args(msg,..)" />   
            <aop:after pointcut-ref="businessService" method="doAfter"/>   
    </aop:aspect>   
</aop:config> 

TestAspect的doAfter方法中就可以访问msg参数,但这样以来AService中的barA()和BServiceImpl中的barB()就不再是连接点,因为execution(* com.spring.service.*.*(String,..))只配置第一个参数为String类型的方法。其中,doAfter方法定义如下:

public void doAfter(JoinPoint jp,String msg) 

访问当前的连接点
任何通知(Advice)方法可以将第一个参数定义为 org.aspectj.lang.JoinPoint 类型。JoinPoint 接口提供了一系列有用的方法, 比如 getArgs() (返回方法参数)、getThis() (返回代理对象)、getTarget() (返回目标)、getSignature() (返回正在被通知的方法相关信息)和 toString() (打印出正在被通知的方法的有用信息。

分享到:
评论

相关推荐

    Spring攻略英文版(附带源码)

     3.2 实例化Spring IoC容器   3.2.1 问题描述   3.2.2 解决方案   3.2.3 实现方法   3.3 解决构造器歧义   3.3.1 问题描述   3.3.2 解决方案   3.3.3 实现方法   第4章 高级Spring IoC...

    Spring基础的思维导图版+附带PDF版

    Spring支持构造器注入、设值注入和接口注入三种方式,使得代码更加灵活和可测试。 回到这个资源,思维导图部分可能详细列出了Spring框架的基础结构,包括核心容器、数据访问/集成、Web模块、AOP模块和MVC模块。核心...

    spring jpetstore spring附带的例子

    这个项目不仅包含了Spring MVC(模型-视图-控制器)架构,还整合了Struts,为开发者提供了深入理解Spring如何处理Web应用的宝贵实例。 1. Spring MVC:作为Spring框架的一部分,Spring MVC提供了一种用于构建Web...

    s2sh struts2 Spring hibernate整合实例(附带所有jar包,及源码)

    Spring作为轻量级的IOC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)容器,管理着应用中的对象。它通过依赖注入将对象的创建和依赖关系交由Spring管理,使得代码更加解耦...

    myeclipse+springmvc+spring+mybatis案例附带mysql数据库

    【标题】"myeclipse+springmvc+spring+mybatis案例附带mysql数据库"是一个集成开发环境与流行Java企业级框架的实战项目,它涵盖了MyEclipse、Spring MVC、Spring和MyBatis四个核心组件,并结合了MySQL数据库,用于...

    spring2.0技术手册随书光盘7

    9. **Spring的单元测试**:Spring Test模块提供了对Spring应用的测试支持,包括ApplicationContext的加载、模拟对象以及AOP代理的处理,方便进行单元测试和集成测试。 10. **Spring的MVC测试**:Spring MVC Test...

    spring-framework-5.0.2.RELEASE-中文注释版.zip

    此压缩包"spring-framework-5.0.2.RELEASE-中文注释版.zip"提供了Spring 5.0.2版本的源码,并且附带了详尽的中文注释,对于学习和理解Spring的工作原理及设计模式具有极大的帮助。 一、Spring概述 Spring作为一个...

    Spring In Action 第三版及源码

    这些源码实例覆盖了Spring框架的多个方面,包括IoC容器、AOP、数据访问和Web开发等。通过实际运行和调试,读者可以加深对Spring工作原理的理解,提升开发技能。 总的来说,《Spring In Action》第三版结合源码的...

    Pro-Spring-5英文版加源代码

    综上所述,《Pro-Spring-5》是学习和精通Spring框架的宝贵资源,结合书中的实例和源代码,开发者可以逐步掌握Spring的核心概念和技术,提升自己的开发技能。对于初学者来说,书中的书签和清晰的解释将使学习过程更为...

    Spring2.0.2 API帮助(附带样品案例war)

    2. **AOP(面向切面编程)**:Spring支持面向切面编程,允许开发者定义“切面”,这些切面可以插入到多个对象的方法中,实现如日志、事务管理和安全性等横切关注点。 3. **IoC容器**:Spring的IoC(Inversion of ...

    Spring3.x企业应用开发实战源码.rar

    2. **面向切面编程(Aspect-Oriented Programming, AOP)**:Spring提供了AOP支持,使得可以将关注点分离,如日志、事务管理等,从核心业务逻辑中解耦出来,实现代码的模块化和可重用性。 3. **Spring MVC**:...

    夏昕spring

    Spring框架的AOP模块提供了一种声明式方式来实现横切关注点,如日志记录、安全控制等,无需修改业务代码即可添加这些非功能性需求。 ### 实战应用 #### 准备工作 在实际项目中使用Spring框架前,需要下载并配置...

    spring攻略第二版

    综上所述,《Spring攻略第二版》不仅涵盖了Spring框架的基础知识,还深入介绍了其核心特性和应用场景,并通过丰富的实例帮助读者更好地理解和掌握Spring框架。无论是对于初学者还是有一定经验的开发者来说,这本书都...

    SpringMVC+Spring+MyBatis整合完整版Web实例(附数据)

    Spring框架的核心是依赖注入(DI)和面向切面编程(AOP)。DI使得组件之间解耦,AOP则提供了模块化横切关注点的能力,如事务管理、日志等。 1. **Bean管理**:Spring通过XML配置或注解定义Bean,自动装配依赖。 2. ...

    框架sprinigmvc4.1.6+spring4.1.6+hibernate4.1.7整合附带jar包

    标题 "框架sprinigmvc4.1.6+spring4.1.6+hibernate4.1.7整合附带jar包" 提供的信息显示,这是一个关于集成Spring MVC、Spring和Hibernate的项目,版本分别为4.1.6和4.1.7。这三个框架在Java开发中扮演着核心角色,...

    Spring3.X企业应用开发实战pdf扫描版+源码光盘

    《Spring3.X企业应用开发实战》是一本深入探讨Spring框架在企业级应用中的实践方法的书籍,PDF扫描版提供了一种方便的电子阅读方式,同时附带的源码光盘则让读者能够动手实践书中所讲解的技术。这本书的核心是帮助...

    Spring mvc + Spring + Spring jdbc 整合 demo.rar

    1. 配置文件:包括Spring的XML配置文件,定义了Bean的实例化、依赖关系和AOP配置。 2. 控制器(Controller):实现了处理HTTP请求的Java类,通常使用注解如@RequestMapping来映射URL。 3. 服务层(Service):包含了...

    spring+springmvc+mybatis搭建的一个房地产交易管理系统附带mysql数据库

    在本项目中,我们利用Spring、SpringMVC和...综上所述,这个房地产交易管理系统是一个典型的Java Web应用实例,展示了Spring全家桶和MySQL数据库在实际项目中的应用,对于学习和理解企业级开发流程具有很高的参考价值。

    Spring宝典源码1

    《Spring宝典源码1》是一份珍贵的学习资源,它包含了Spring框架2.0版本的源代码,并且附带有详尽的注释和实例,旨在帮助开发者深入理解Spring的工作原理和应用方式。Spring作为Java企业级应用开发的重要框架,它的...

Global site tag (gtag.js) - Google Analytics