• 第1章 初识AOP


    目录

    1-1 介绍Aop

    1-2 初识Spring AOP-1

    1-3 【扩展知识】Spring中的schema源码下载

     1-4 初识Spring AOP-2


    1-1 介绍Aop

     课程介绍

     

     假如a是用户管理模块b是员工管理模块都拥有自己的业务处理类

    现在要求两个模块从上到下业务处理的过程中都要进行权限过滤,只有拥有权限的用户才能访问对应模块,我们可能回去代码前增加权限判断的代码,如果不需要了,还要代开代码再去掉,有没有更好的办法?springaop就可以很好地解决

     执行前或者执行后都可以额外的去增加相应的扩展功能,这个扩展功能称为切面

    当不需要了还可以快速移除

     就像浏览器中的各种插件,不需要就可以移除

    为什么这些外挂的扩展功能被称为切面呢?这些软件模块想横切面一样穿插在了我们原始软件的运行过程中吗,切面aspect其实就是横切面的意思

    正式了解

     

     

    1-2 初识Spring AOP-1

     

     感性认识一下

    两个dao两个service,分别对应了员工表的增删改查,和用户表的增删改查

     

     

     还有两个Service

     

     员工服务:提供员工日常相关的服务

     userService

     打印出两个方法各自执行时的时间,通过时间信息在具体的什么时段是应用程序负载最高的时刻

     这样不就可以了吗?加入我们有很多类复制粘贴很多次也是很麻烦的事。假如不需要时间输出了是不是还得挨个删啊,这样的工作显然十分低级。我们完全可以对这些方法进行拦截,在运行前来打印时间,然后再去执行方法内部的代码。像这种不用修改源代码,对原有程序行为进行扩展的技术就是springaop

    演示

    引入依赖

     

     具备了aop功能但并未意味着是可用的,还有在引入其他模块

     只有引入了他才可以正常的运行

    创建xml文件

    增加了一个名为aop的命名空间 ,这个aop是必须用到的,给我们提供了aop需要的标签

     ioc容器配置好了,为了能让这个ioc容器运行起来,增加入口类

     调用

     模拟创建新用户的过程

     上面一句话来自userService下面来自对应的daoinsert方法

    1-3 【扩展知识】Spring中的schema源码下载

    JFrog

     

     

     1-4 初识Spring AOP-2

    要求在执行Service或者Dao任何方法的时候都要打印出当前方法所要执行的时间,在原有方法上面增加时间打印,实在是太低级了,而且非常不方便,通过aop就可以非常轻松的实现这个需求

    新增包aspect

    新建针对于方法的切面类

    什么是目标类/目标方法?真正要执行的方法就是目标方法 

    它所隶属的类就称作目标类

     

     这样就完成了额外功能的扩展,在方法运行前来将对应的类和方法名称在控制台中进行打印,可是MethodAspect可不知道你这个类是要在哪些方法运行前执行。

    所以还是要在applicationContext.xml里利用aop进行配置,说明切面类作用的范围是什么

     作为aop底层运行也是要在ioc容器中的,定义一个bean让ioc容器去实例化

     methodAspect作为ioc容器运行的时候只会把他当成普通的bean进行加载,如果要让ioc容器认为这是一个切面类的话就必须使用

     来进行定义,因为原始的切面类里头包含了

     这个方法,before指向printExecutionTime

     切面类所作用的范围是切点所决定的,用在了

    这条路径的所用方法上 

    运行效果

     当不再需要这个需求时,把它注释掉就好了

     

     aop运行是基于ioc基础上的没有ioc就没有aop

    要引入两个依赖 

    像往常一样对这些bean进行实例注入 

     厨师ioc容器的方式也是完全相同的

    额外增加切面类,在类中增加扩展的功能

     参数要求为连接点joinPoint,

    然后通过config,对切面进行控制,其中pointcut用于描述当前切面作用在那些类的哪些方法上

     

  • 相关阅读:
    php花式读取文件
    【每日一题Day42】生成交替二进制字符串的最小操作数 | 模拟 位运算
    Nginx之正则表达式、location匹配简介及rewrite重写
    4.如何终止线程
    Flutter NestedScrollView 、SliverAppBar全解析,悬浮菜单的应用
    .NET性能优化-推荐使用Collections.Pooled
    springboot基础及上传组件封装
    01 介绍
    Python教程:函数入门到精通
    图解算法数据结构——数据结构
  • 原文地址:https://blog.csdn.net/lonelyneet/article/details/125899351