Spring第三天

Posted sunners

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring第三天相关的知识,希望对你有一定的参考价值。

1.Aop底层实现

  jdk动态代理+cglib代理

  jdk:需要有一个接口,代理类与被代理类是兄弟关系,都继承子一个类

  cglib:不需要接口,代理类与被代理类是父子关系,被代理类是父

  静态代理:只能代理某一个接口的实现类

  动态代理:可以代理任意实现类

2.切面的5种通知类型

  @before 目标方法执行前执行

  @after 目标方法执行后执行

  @AfterReturning 目标方法执行成功后执行

  @AfterThrowing 出现异常后执行

  @Around 环绕通知

3.切入点表达式  

  @PointCut(value="execution( * *.*(..))")//第一个星代替了方法修饰符以及返回类型 ,第二个星代替了全类名,第三个*代替了方法名,(..)代替了方法参数

  可以用逻辑运算符共同使用@PointCut(value="execution( * *.*(..))||execution( * *.*(..))")

4.根据通知获取方法信息

  在通知上加入JoinPoint 参数

  Signature signature = joinPoint.getSignature();

  //获取方法参数
  Object[] args = joinPoint.getArgs();

  //获取方法名
  String name = signature.getName();

  获取目标方法的返回值:在返回通知上添加returning ="" 并且在方法上设置参数,类型为Object,参数名要与 returning的值一致

  获取目标方法的异常信息:在异常通知上添加throwing="",并且在方法上设置参数,类型为Throwable,参数名要与 thorwing 的值一致

5.通知的底层原理 

    try {
      try {
        //前置通知

        //目标方法
      } finally {
        //后置通知
    }

        //返回通知 
    } catch (Exception e) {
        //异常通知
    }

  当有多个切面时,就是在目标方法出添加一组try{ try{} flnally{} }catch{} 块

  切面执行顺序默认按照类名首字母的顺序,首字母相同比较第二个,可以在类上添加 Oreder注解设置优先顺序,值越小越先执行

6. 环绕通知

  @Around(切入点表达式,如果不是一个类就要用全类名)

    方法  :方法的返回值必须是Object且必须有返回值

7.xml配置Aop切面 

  (1) 配置spring容器

  (2)配置Aop

     

      <aop:config>

          //配置切入点

            <aop:pointcut expression="execution()" ></aop:pointcut  >

              //配置切面

            <aop :aspect ref=""  id="">

                     //5种通知

          <aop:after method="After" pointcut-ref="pointcut" />
          <aop:before method="before" pointcut-ref="pointcut"/>
          <aop:after-returning method="AfterReturning" returning="result" pointcut-ref="pointcut" />// pointcut-ref 指向切入点、 returning 接收目标方法返回值,值要与目标方法参数名一致
          <aop:after-throwing method="AfterThrowing" throwing="ex" pointcut-ref="pointcut"/> method:目标方法名   throwing接收目标方法的异常,值要与目标方法参数名一致

            </aop:aspect>

 

 

 

        </aop:config>

execution

以上是关于Spring第三天的主要内容,如果未能解决你的问题,请参考以下文章

解析Spring第三天(面向切面AOP)

Spring第三天

Spring框架第三天

断路器Hystrix与Turbine集群监控-Spring Cloud学习第三天

辞职后社招面试第三天(2019/11/06)

Spring:概述,IOC(Bean管理),整合Web项目,整合JUnit单元测试