3.spring之旅之面向切面的spring

目录

1.什么是面向切面编程


1.什么是面向切面编程

切面提供了取代继承和委托的另一种可选方案,在使用面向切面编程时,我们可以通过声明的方式定义这个功能要以何种方式在何处应用,而无需修改受影响的类.横切关注点可以被模块化为特殊的类,这些类被称为切面.

  1. 1定义AOP术语:advise通知,pointcut切点,joinpoint连接点
    advise通知:切面也有目标--它必须要完成的工作.在AOP术语中,切面的工作被称为通知.通知定义了切面是什么以及何时使用

    spring有5种类型的通知:
    1).前置通知before在目标方法被调用之前通知功能
    2).后置通知after:在目标方法被调用之后通知
    3).返回通知After-returning:目标方法成功执行后调用通知
    4).异常通知After-throwing:抛出异常时通知
    5).环绕通知Around:方法在调用前后调用后都执行

    连接点joinPoint:连接点是在应用执行过程中能够插入切面的一个点.切面代码能够通过这些点插入到应用程序正常的流程中,并添加新的行为

    切点pointCut:

    切面aspect:是通知和切点的结合,通知和切点共同定义了切面的全部内容---他是什么,在何时和何处完成器功能

    引入introduction:引入允许我们向现有的类添加新方法或属性.

    织入weaving:织入是把切面应用到目标对象并创新新的代理对象的过程

    总结:通知包含了需要用于多个应用对象的横切行为;连接点是程序执行过程中能够应用通知的所有点;切点定义了通知被应用的具体位置;


    2.spring对AOP的支持

    spring提供了4种类型的AOP支持
    1).基于代理的经典spring AOP
    2).纯POJO切面
    3).@Aspect注解驱动的切面
    4).注入式Aspect切面
    注意:spring AOP构建在动态代理基础之上,因此spring对AOP的支持局限于方法拦截.如果你的AOP需求超过了简单的方法调用,那么需要考虑使用AspectJ来实现切面

    3.spring在运行时通知对象
    代理类封装了目标类,并拦截被通知方法的调用,并把调用转发给真正的目标bean.当代理拦截到方法调用时,在调用目标bean之前,会执行切面逻辑.
  2. 通过切点来选择连接点
    springAOP支持的指示器有:arg(),@args(),execution(),this(),target,@target(),within(),@within(),@annotation
    execution()是我们在编写切点定义时最主要使用的指示器,

    1.编写切点@pointcut("execution(* com.zh3721.crowdsource.webapp..controller.*.*(..))")

    2.在切点选择中选择bean
    可以在切点表达式中使用bean的ID来表示bean,如@pointcut("execution(* com.zh3721.crowdsource.webapp..controller.*.*(..)and bean(XXX))")表示我们在切入controller包下的方法时,限定bean的id为XXX

    3.
发布了24 篇原创文章 · 获赞 1 · 访问量 3429

猜你喜欢

转载自blog.csdn.net/ashylya/article/details/103705077