第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用于描述当前切面作用在那些类的哪些方法上

猜你喜欢

转载自blog.csdn.net/lonelyneet/article/details/125899351