老生常谈系列之Aop--前言

前言

既然是前言,那么这一篇就不会写具体的技术问题。这篇文章主要记录我一些个人的思考以及为什么要写文章的缘由。前不久在跟朋友的交流中偶然聊到了Aop,Aop全称为 Aspect-oriented Programming ,翻译过来即为面向切面编程。这对大家来说这是个很眼熟的东西,对我来说亦如此。似乎从我们开始接触Java开始,这个概念一直就环绕在我们左右,照理说应该非常熟悉才对,但事实上就算项目有用到,也止于完成需求功能。即使是学习,也浅尝辄止,了解到Spring里的实现为动态代理还有其他一些切点切面的概念已经算是学得比较深了,但是始终没有去深究这个东西的来龙去脉,也没有了解过真正的原理,至少对我个人来说是这样的,一切都朦朦胧胧,也可能是由于我功力不足,没办法学透。

于是萌生了写一个简单的Aop系列文章发布在博客上,算是自己的学习记录和总结,如果能帮助到别人,那就更好了。冒出这个念头的一瞬间我是十分欣喜的,就像要开始一趟新的征程。但是稍后我就冷静下来,这一系列可不简单,细节相当多。如果只是作为我的笔记,那么就算错漏百出也只是荼毒我一人,但是如果别人看了误人子弟,那就不是我的初衷了。我怕我没有办法写清楚,更怕我会写错。最为忌讳的就是以己昏昏使人昭昭,到时候写成前言不搭后语恐怕要贻笑大方。也许我写的可能根本不会有人看,但是对质量的要求是我自身的准则。不清不楚、不明不白是万万不可的。

稍加思索之后,我觉得我应该放弃。但是打开了Spring Aop部分的源码之后,我看到了我一年前加的注释,顿时就觉得,我一定要写,无论写得是好是坏。因为一年前我就是怀揣着写系列文章的想法去看源码的,但是在后来,我放弃了。同样的理由,我怕我写不好,我怕我写不清楚,更怕会写错。

资料

所以我决定从头开始梳理,从AspectJ开始,再到Spring Aop。我搜了一下网上的文章,发现互相借鉴的情况很多鱼龙混杂,以至于会出现差不多的一篇文章内容,同时占据了Google搜索的前十。所以追根溯源,还是觉得看官方文档比较直接,于是我去看了AspectJ的官方文档,然后去看了Spring的官方文档Aop部分。同时阅读了部分Spring相关书籍,例如《Spring源码深度解析》、《Spring实战》、《Spring揭秘》以及《Spring5核心原理与30个类手写实战》等书籍的Aop部分。同时参考了许多大佬的博客,有很多非常好的博客,我觉得他们写得已经很好了。下面推荐一下大佬们的文章:

【必读】首先,推荐的是《Spring 源码深度解析》的 「第7章 AOP」 章节。

因为 Spring 静态 AOP 实际场景下,使用较少,可以选择性看看。感兴趣的话,可以对 Java Instrumentation 机制做一定的了解。目前主流的链路追踪系统的 Java Agent 都是基于它来实现的。

然后,也推荐看看五月的仓颉关于 AOP 的两篇文章:

再然后,也非常推荐田小波关于 AOP 的四篇文章,非常细致,特别是对 AOP 的概念解释以及流程的拆分上:

再再然后,还会非常推荐 JavaDoop 关于 AOP 的一篇文章,看着大气:

最后,推荐一些和 AOP 相关的有趣的文章:

目标

我觉得我的知识储备在他们面前没有任何的亮点,但是我还是打算自己写,也算是自娱自乐,或者是对自己的一种交代,跟着大佬们的指导,也许会少走很多弯路。这是一个开篇,也是自己立下的flag,希望我能按照自己的想法去写完这一系列的文章。下面说一下我的思路安排,首先我会介绍一下AspectJ的用法,纯AspectJ如何实现切面,接下来简单介绍一下AspectJ的原理,然后到Spring Aop是如何实现的,Spring Aop与AspectJ的关系,Spring Aop的源码解析,最后会列几个项目中使用Aop遇到的一些问题。所以列出来打标题大概如下:

  • AspectJ简介、原理和用法
  • Spring Aop简介和用法
  • Spring Aop的源码解析(这一部分会分多篇)
  • 项目里使用Aop的例子以及问题

有善始者实繁,能克终者盖寡。 flag立完了,接下来要好好实现了。如果有人阅读至此,与君共勉。路漫漫其修远兮,吾将上下而求索。

老生常谈系列之Aop--前言的更多相关文章

  1. 老生常谈系列之Aop--Spring Aop源码解析(二)

    老生常谈系列之Aop--Spring Aop源码解析(二) 前言 上一篇文章老生常谈系列之Aop--Spring Aop源码解析(一)已经介绍完Spring Aop获取advice切面增强方法的逻辑, ...

  2. 老生常谈系列之Aop--Spring Aop源码解析(一)

    老生常谈系列之Aop--Spring Aop源码解析(一) 前言 上一篇文章老生常谈系列之Aop--Spring Aop原理浅析大概阐述了动态代理的相关知识,并且最后的图给了一个Spring Aop实 ...

  3. 老生常谈系列之Aop--Spring Aop原理浅析

    老生常谈系列之Aop--Spring Aop原理浅析 概述 上一篇介绍了AspectJ的编译时织入(Complier Time Weaver),其实AspectJ也支持Load Time Weaver ...

  4. 老生常谈系列之Aop--Aop的经典应用之Spring的事务实现分析(三)

    老生常谈系列之Aop--Aop的经典应用之Spring的事务实现分析(三) 前言 上一篇文章老生常谈系列之Aop--Aop的经典应用之Spring的事务实现分析(二)从三个问题导入,分析了Spring ...

  5. 老生常谈系列之Aop--CGLIB动态代理的底层实现原理

    老生常谈系列之Aop--CGLIB动态代理的底层实现原理 前言 上一篇老生常谈系列之Aop--JDK动态代理的底层实现原理简单讲解了JDK动态代理的实现,动态代理常用实现里面的双子星还有另一位--CG ...

  6. 老生常谈系列之Aop--JDK动态代理的底层实现原理

    老生常谈系列之Aop--JDK动态代理的底层实现原理 前言 在Aop系列里面有两篇文章,分别是老生常谈系列之Aop--Spring Aop原理浅析和老生常谈系列之Aop--Spring Aop源码解析 ...

  7. 老生常谈系列之Aop--AspectJ

    老生常谈系列之Aop--AspectJ 这篇文章的目的是大概讲解AspectJ是什么,所以这个文章会花比较长的篇幅去解释一些概念(这对于日常开发来说没一点卵用,但我就是想写),本文主要参考Aspect ...

  8. Spring3系列12- Spring AOP AspectJ

    Spring3系列12- Spring AOP AspectJ 本文讲述使用AspectJ框架实现Spring AOP. 再重复一下Spring AOP中的三个概念, Advice:向程序内部注入的代 ...

  9. Spring3系列11- Spring AOP——自动创建Proxy

    Spring3系列11- Spring AOP——自动创建Proxy 在<Spring3系列9- Spring AOP——Advice>和<Spring3系列10- Spring A ...

随机推荐

  1. 什么是 Apache Kafka?

    Apache Kafka 是一个分布式发布 - 订阅消息系统.它是一个可扩展的,容错的 发布 - 订阅消息系统,它使我们能够构建分布式应用程序.这是一个 Apache 顶 级项目.Kafka 适合离线 ...

  2. String是最基本的数据类型吗?

    基本数据类型包括byte.int.char.long.float.double.boolean和short.java.lang.String类是final类型的,因此不可以继承这个类.不能修改这个类. ...

  3. NULL 是什么意思 ?

    NULL 这个值表示 UNKNOWN(未知):它不表示""(空字符串).对 NULL 这 个值的任何比较都会生产一个 NULL 值.您不能把任何值与一个 NULL 值进行比 较,并 ...

  4. 列举 Spring Framework 的优点?

    由于 Spring Frameworks 的分层架构,用户可以自由选择自己需要的组件. Spring Framework 支持 POJO(Plain Old Java Object) 编程,从而具备持 ...

  5. 是否可以继承 String 类?

    String 类是 final 类,不可以被继承. 补充:继承 String 本身就是一个错误的行为,对 String 类型最好的重用方式是关 联关系(Has-A)和依赖关系(Use-A)而不是继承关 ...

  6. MySQL优化篇(一),我可以和面试官多聊几句吗?——SQL优化流程与优化数据库对象

    我可以和面试官多聊几句吗?只是想偷点技能过来.MySQL优化篇(基于MySQL8.0测试验证),上部分:优化SQL语句.数据库对象,MyISAM表锁和InnoDB锁问题. MyISAM表锁和InnoD ...

  7. RestTemplate-HTTP工具

    RestTemplate 是由 Spring 提供的一个 HTTP 请求工具.在上文的案例中,开发者也可以不使用 RestTemplate ,使用 Java 自带的 HttpUrlConnection ...

  8. spring总览

    Spring 概述 1. 什么是spring? Spring 是个java企业级应用的开源开发框架.Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用.Spring  ...

  9. nodejs全局对象简析

    Global:全局变量 定时器.控制台输出.事件 模块化相关的一些全局变量 path/url相关的一些全局变量 编码相关的 buffer:缓存(简单介绍) Process:进程(重点解析) 一.Glo ...

  10. Nestjs模块机制的概念和实现原理

    1 前言 Nest 提供了模块机制,通过在模块装饰器中定义提供者.导入.导出和提供者构造函数便完成了依赖注入,通过模块树组织整个应用程序的开发.按照框架本身的约定直接撸一个应用程序,是完全没有问题的. ...