老生常谈系列之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. Eclipse 从SVN检出项目之《文件夹 “” 已不存在 》

    1.eclipse 从svn检出项目 报文件夹不存在, 参考博客 https://blog.csdn.net/wenbsu/article/details/80965680 2.You need to ...

  2. 关于elementUI如何在表格循环列表里分别新增Tag的设计使用

    话不多说,直接上代码.想要实现的目的是这样的,想要在表格里单独添加每一个tag 那么,需要解决的问题就是如何定义这每一个插槽里的输入框,把每个输入框以及里面插入的数据区分开. 研究了很久,最后选择了对 ...

  3. (stm32f103学习总结)—USART串口通信

    一. USART简介 USART即通用同步异步收发器,它能够灵活地与外部设备进行全双工 数据交换,满足外部设备对工业标准 NRZ 异步串行数据格式的要求. UART即通用异步收发器,它是在USART基 ...

  4. React 和 ES6 工作流之 Webpack的使用(第六部分)

    这是React和ECMAScript2015系列文章的最后一篇,我们将继续探索React 和 Webpack的使用. 下面是所有系列文章章节的链接: React . ES6 - 介绍(第一部分) Re ...

  5. 前端webpack workflow(二)——Webpack基本使用

    作者:Jogis原文链接:https://github.com/yesvods/Blog/issues/3转载请注明原文链接以及作者信息 前一篇文章介绍了webpack以及安装方法,这次将会介绍web ...

  6. 走一步再走一步,揭开co的神秘面纱

    前言 原文地址 源码地址 了解co的前提是已经知晓generator是什么,可以看软大神的Generator 函数的语法,co是TJ大神写的能够使generator自动执行的函数库,而我们熟知的koa ...

  7. 《深入理解ES6》笔记——块级作用域绑定(1)

    本章涉及3个知识点,var.let.const,现在让我们了解3个关键字的特性和使用方法. var JavaScript中,我们通常说的作用域是函数作用域,使用var声明的变量,无论是在代码的哪个地方 ...

  8. 摩拜单车微信小程序开发技术总结

    前言 摩拜单车小程序已于微信小程序上线第一天正式发布,刷爆微博媒体朋友圈.本文主要讲讲技术方向的总结,在段时间的开发周期内内如何一步步从学习到进阶. 思维转变 微信小程序没有HTML的常用标签,而是类 ...

  9. 快速安装 kafka 集群

    前言 最近因为工作原因,需要安装一个 kafka 集群,目前网络上有很多相关的教程,按着步骤来也能完成安装,只是这些教程都显得略微繁琐.因此,我写了这篇文章帮助大家快速完成 kafka 集群安装.   ...

  10. properties和XML配置文件内容的获取

    @ 目录 总结内容 1. Java中为什么要使用配置文件 2. Java中常用的配置文件类型有哪些以及它们的特点 Properties配置文件 XML配置文件 总结 总结内容 1. Java中为什么要 ...