• Spring004--Spring AOP(mooc)


    一。Spring AOP概览

    1.1。AOP(面向切面编程)是什么

          1。 AOP是一种编程范式,而不是编程语言。

      2。解决特写问题,不能解决所有问题

      3。是OOP的补充,不是替代

          除了面向切面编程,还有如下编程范式:

      1。面向过程编程:如c/python

      2。面向对象编程:如java/c++

      3。函数式编程

      4。事件驱动编程(GUI开发中比较常见)

      5。面向切面编程

    1.2。AOP(面向切面编程)解决的问题

    1。DRY:Don't Repeat yourself  避免代码重复问题

    2。SoC:Separation of Concerns 关注点分离

         (1)。水平分离:展示层-》服务层-》持久层

       (2)。垂直分离:模块划分(订单/库存等业务角度)

         (3)。切面分离:分离功能性需求与非功能性需求(把非功能性需求从功能性需求中剥离开来集中管理)

    1.3。AOP(面向切面编程)好处

    AOP好处即为“集中管理”:

    1。集中处理某一关注点/横切逻辑;

    2。可以方便的添加/删除关注点;

    3。侵入性少,增强代码可读性及可维护性;

    1.4。AOP(面向切面编程)应用声景

    1。权限控制

    2。缓存控制

    3。事务控制(数据库事务控制)

    4。审计日志(操作记录)

    5。性能监控

    6。分布式追踪

    7。异常处理

    以上为偏非功能性需求,特别适合AOP应用声景。

    1.5。支持AOP(面向切面编程)的编程语言

    java / .net / c / c++ / ruby/ python /php ...

    二。案例实战:利用AOP改善既有代码

    案例背景:

    1。产品管理的服务

    2。产品添加/删除操作只能管理员才能进行操作

    3。普通实现  VS  AOP实现

    (1)。普通实现:在原有业务代码中添加是否为管理员验证,而且每增加一个方法就需要验证一次。麻烦。

    (2)。AOP:将验证逻辑从业务代码中独立出来,应用配置文件或注解方式实现。

    Step1:添加公共切面验证

    上述:

    @Pointcut():表示在标注注解AdminOnly上,添加切面。

    @Before():表示在之前进行拦截。

    Step2:在需要拦截的方法上增加注解,AOP即可以对其进行拦截。

    三。Spring AOP使用详解

    3.1。使用方式

    3.2。Spring AOP主要注解

    1。@Aspect注解:主要标注一个java类是Aspect切面配置的一个类。

    2。@Pointcut注解:标注要在哪些类哪些方法上植入相应的代码。

    3。@Advice注解:什么时机去植入,如在执行之前/之后

    3.3。Spring AOP切面表达式介绍

    1。wildcards(通配符)

    * :匹配任意数量的字符

    + :匹配指定类及其子类

    .. :一般用于匹配任意数的子包或参数

    2。operators(运算符)

    && :与操作符

    ||     :或操作符

    !   :非操作符

    3。designators(指示器:想通过什么方式来匹配你想要的方法)

    (1)。within表达式(匹配包/类型)

    (2)。匹配对象

    说明:

    @Pointcut里面的this:一般情况和target一样(有待补充)

    target(接口):代表是这个接口的实现类 进行aop 

    bean(类):匹配这个类里面的所有方法

    (3)。匹配参数

    (4)。匹配注解

    (5)。execution表达式

    ?:表示是可以省略的。 没有?则表示是必须的。

    参数1:修饰符pattern(可选)

    参数2:返回值pattern(必须)

    参数3:描述层包名pattern(可选)

    参数4:描述方法名pattern/方法参数pattern(必须)

    参数5:匹配方法抛出哪些异常(可选)

    (6)。advice注解--5种

    【1】:@Before:前置通知

    【2】:@After(finally):后置通知,方法执行完之后

    【3】:@AfterReturning:返回通知,成功执行之后

    【4】:@AfterThrowing:异常通知,抛出异常之后

    【5】:@Around:环绕通知

    四。Spring AOP实现原理解析

    4.1。原理概述

    植入时机:

    1。编译期(AspectJ)

    2。类加载时(AspectJ5+)

    3。运行时(Spring AOP):以spring aop为代表。

    运行时是如何植入的?代理对象。从静态代理到动态代理(动态代理实现:基于接口代理与基于继承代理)

    4.2。代理模式

    类图:

    1。静态代理

    2。动态代理(基于接口代理与基于继承代理 / jdk代理与Cglib代理)

    (1)。JDK代理

    (2)。Cglib代理

     

  • 相关阅读:
    Composition API
    Vue通讯
    pc-H5 适配方案
    Mac Chrome浏览器跨域指令快速启动应用创建,避免每次在终端输入指令
    datatables 添加title属性
    元素的显示与隐藏
    【前端】跨浏览器事件处理程序EventUtil.js个人注释及详解
    【前端】javascript+jQuery实现旋转木马效果轮播图slider
    【前端】javascript+jquery实现手风琴式的滚动banner或产品展示图
    【前端】javascript实现带有子菜单和控件的轮播图slider
  • 原文地址:https://www.cnblogs.com/kaixinyufeng/p/9098879.html
Copyright © 2020-2023  润新知