读书笔记-《Spring技术内幕》-计文柯(二):AOP的实现

一、这些名词的理解

相比IoC,AOP部分其实没有太难的类层次设计,但是出现了许多相关的术语,如果不了解的话一定要先了解。

代理模式(Proxy):调用者通过调用代理类来达到对被代理类的操作,详细可以看这篇博客 点击打开链接 ,注意动态代理和静态代理的区别。

反射:一种计算机处理方式。是程序可以访问、检测和修改它本身状态或行为的一种能力。我们可以使用它并配合一些设计模式,让代码的可维护性大大提高,例如

Apple apple = (Apple)Class.forName(appleTypeName);

回调函数:A类在调用B类的b方法时,b方法反过来自己去调用A类的a方法。详细可以看这个知乎问题,通俗的理解和严谨分析都有 点击打开链接 。

拦截器、监听器、拦截器:其实是顾名思义的,不过具体细节,建议看这个知乎问题点击打开链接 。

二、AOP

1.引出问题

AOP全称Aspect Oriented Programming,即面向切面编程。学过c语言的同学都知道,最早我们有面向过程编程,然后到了C++、Java是面向对象编程,这个面向切面编程时什么呢?当下我们知道如何模块化,知道各种设计模式,却还是在遇到一个特定情况时无能为力,那就是当一个关注点分散在各个对象、类、函数中,它使用重复并且分散,同时又不大方便去把它封装成一个单独的函数或是类。这个时候我们就需要用面向切面编程的思想来封装它。

(以下三个定义为书中给出,建议自己使用Spring AOP的配置,写一个helloworld就非常好理解了。)

Advice(通知):定义在连接点做什么,围绕方法调用而注入切面行为。包括Before,After,After return,Around,After throwing。

Pointcut(切点):决定Advice应该作用于哪个链接点,也就是说通过Pointcut来定义需要增强方法的集合。

Advisor(通知器):结合Advice和Pointcut。

    图2.1  AOP体系结构

2.实现

        AOP本身实现其实并不复杂,它基于JDK动态代理技术(也可以通过第三方的CGLIB),同时在JDK的基础上做了一些其他工作,从而让Spring内部其他模块例如事务处理也可以用它来实现,同时我们也可以用其来实现项目中的日志功能(当然,实际上我们更多的是使用Log4j或其他日志框架)。理解AOP的难点更多是对于文中第一部分给出的那些术语的理解上。

发布了25 篇原创文章 · 获赞 12 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_25498677/article/details/70197824