发布时间:2023-02-05 文章分类:编程知识 投稿人:王小丽 字号: 默认 | | 超大 打印

终于拥有属于自己的博客了,记录一点心得体会吧,生活的后花园。

本人大二,双非本科在读。很早之前就想开博客了,这种想法在去年暑假,也就是2022年的夏天尤为强烈。当时爱上了算法,每天都要刷不少的题,虽然有的是看着大佬们的题解才拿到思路的,但慢慢积累下来也养成了不少算法思维。打开博客对我来说真不是一件容易的事情,不知道写什么,写出来的东西入不了大家的眼怎么办,单纯浪费了时间怎么办...当时啊想了很多劝自己打消开博的念头,但直到现在,我才发现,如果能把当时记录下来,如今的我可以说是拥有一笔不小的财富了。现在又是一次机会了,还是抓住吧。这边就记录一点平时的学习心得和一些感悟吧,便于自己及时总结归纳,时不时也能写一些生活碎片,计划是每天晚上写一点,没有意外的每天都会有,欢迎技术交流!

最近在学习Spring,前几天都是混乱的,学一会歇一会,没有很强的连贯性。现在事情都忙完了,终于有时间空下来定心学习了。前面学习中,首先了解到了Spring的优点,在开发中能做到充分解耦,简化开发,同时提供大量的开发工具。目前学完了Spring的核心容器部分,包括有IoC(控制反转)和DI(依赖注入),Bean的配置文件装配和注解开发,见识尚为短浅,学无止境,虚心向前。下面来整理一下今天学到的AOP(面向切面编程)。

什么是AOP?

我的理解是,AOP是将一个共同的功能抽取出来,然后分配给需要他们的方法,在不惊动原有的设计的情况下,实现功能的修改。在面向对象的编程中,我们需要为某个事务编写方法时,一般都会需要什么写什么,对于完全不同的事务来说,效率很高,然而如果遇到有共性的事务时,操作就变得麻烦了起来。要对每一种事务都书写相同的方法,即使怎么熟练ctrl+cv开发,都会被这复杂的步骤折服。而AOP则解决了这一办法,例如在每次查找操作后记录操作者,操作的对象,操作的时间...就可以将其单独写为一个方法,在AOP中,这种方法称为通知。它将互通的代码抽取出,在程序运行是将其分散到需要执行的地方。区别于继承的地方在于,该过程是一种采取横向抽取机制的方式,而继承采取的是纵向的方式。生动点,或许可以比作一个家族,从爷爷到儿子到孙子,他们都继承这这个家族的Y染色体,一脉相承,这就是继承,而AOP实现的就是X染色体的发放,例如这个爷爷有3个儿子,那么无论如何,奶奶的X染色体都会发放给他们的3个儿子,这比喻应该够生动了吧!这样一来,AOP是什么就清楚了,要知道的是它能提高开发效率,增强代码的可维护性(如果要修改方法,很简单,修改通知即可),这是它成为Spring的核心思想之一的重要原因!

AOP有什么?

在大致知道AOP负什么责任之后,有必要来了解一下AOP里面有什么。

AOP的工作流程是什么?

  匹配失败则创建一个新对象

  匹配成功,则创建原始对象(目标对象)的代理对象(织入)

  获取bean,调用方法并执行,完成操作。

  获取的bean是代理对象时,根据代理对象的运行模式运行原始方法与增强的内容,便完成了操作

Spring中AOP的本质是什么:代理模

在main函数中运行如下代码(AOP配置已完成),查看此时目标对象的class。

        ApplicationContext ctx=new AnnotationConfigApplicationContext(SpringConfig.class);
BookDao bookDao= ctx.getBean(BookDao.class);
bookDao.update();
System.out.println(bookDao);
System.out.println(bookDao.getClass());

Spring—Aop(1)暨初开博客感想

在main函数中运行如下代码(AOP配置已完成),查看此时目标对象的class。可以发现最终用的是代理对象。(在AOP中对最终的对象的toString方法进行了重写,所以会看到第三行的内容)。

AOP切入点表达式

切入点:要增强的方法

切入点表达式:要增强的方法的描述方式

描述方式一:执行xx包下的xx接口中的无参数方法

描述方式二:执行xx.impl包下的xx类中的无参数方法

格式:动作关键词(访问修饰符号 返回值 包名.类/接口.方法名(参数)异常名)

Spring—Aop(1)暨初开博客感想Spring—Aop(1)暨初开博客感想