老生常谈系列之Aop--前言
老生常谈系列之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 的两篇文章:
- 《【Spring源码分析】AOP源码解析(上篇)》 ,对 Spring AOP XML 配置的方式进行源码解析。
- 《【Spring源码分析】AOP源码解析(下篇)》 ,内容上,和《Spring 源码深度解析》的「第7章 AOP」章节,作为互为补充。
再然后,也非常推荐田小波关于 AOP 的四篇文章,非常细致,特别是对 AOP 的概念解释以及流程的拆分上:
- 《Spring AOP 源码分析系列文章导读》
- 《Spring AOP 源码分析 - 筛选合适的通知器》
- 《Spring AOP 源码分析 - 创建代理对象》
- 《Spring AOP 源码分析 - 拦截器链的执行过程》
再再然后,还会非常推荐 JavaDoop 关于 AOP 的一篇文章,看着大气:
最后,推荐一些和 AOP 相关的有趣的文章:
目标
我觉得我的知识储备在他们面前没有任何的亮点,但是我还是打算自己写,也算是自娱自乐,或者是对自己的一种交代,跟着大佬们的指导,也许会少走很多弯路。这是一个开篇,也是自己立下的flag,希望我能按照自己的想法去写完这一系列的文章。下面说一下我的思路安排,首先我会介绍一下AspectJ的用法,纯AspectJ如何实现切面,接下来简单介绍一下AspectJ的原理,然后到Spring Aop是如何实现的,Spring Aop与AspectJ的关系,Spring Aop的源码解析,最后会列几个项目中使用Aop遇到的一些问题。所以列出来打标题大概如下:
- AspectJ简介、原理和用法
- Spring Aop简介和用法
- Spring Aop的源码解析(这一部分会分多篇)
- 项目里使用Aop的例子以及问题
有善始者实繁,能克终者盖寡。 flag立完了,接下来要好好实现了。如果有人阅读至此,与君共勉。路漫漫其修远兮,吾将上下而求索。
老生常谈系列之Aop--前言的更多相关文章
- 老生常谈系列之Aop--Spring Aop源码解析(二)
老生常谈系列之Aop--Spring Aop源码解析(二) 前言 上一篇文章老生常谈系列之Aop--Spring Aop源码解析(一)已经介绍完Spring Aop获取advice切面增强方法的逻辑, ...
- 老生常谈系列之Aop--Spring Aop源码解析(一)
老生常谈系列之Aop--Spring Aop源码解析(一) 前言 上一篇文章老生常谈系列之Aop--Spring Aop原理浅析大概阐述了动态代理的相关知识,并且最后的图给了一个Spring Aop实 ...
- 老生常谈系列之Aop--Spring Aop原理浅析
老生常谈系列之Aop--Spring Aop原理浅析 概述 上一篇介绍了AspectJ的编译时织入(Complier Time Weaver),其实AspectJ也支持Load Time Weaver ...
- 老生常谈系列之Aop--Aop的经典应用之Spring的事务实现分析(三)
老生常谈系列之Aop--Aop的经典应用之Spring的事务实现分析(三) 前言 上一篇文章老生常谈系列之Aop--Aop的经典应用之Spring的事务实现分析(二)从三个问题导入,分析了Spring ...
- 老生常谈系列之Aop--CGLIB动态代理的底层实现原理
老生常谈系列之Aop--CGLIB动态代理的底层实现原理 前言 上一篇老生常谈系列之Aop--JDK动态代理的底层实现原理简单讲解了JDK动态代理的实现,动态代理常用实现里面的双子星还有另一位--CG ...
- 老生常谈系列之Aop--JDK动态代理的底层实现原理
老生常谈系列之Aop--JDK动态代理的底层实现原理 前言 在Aop系列里面有两篇文章,分别是老生常谈系列之Aop--Spring Aop原理浅析和老生常谈系列之Aop--Spring Aop源码解析 ...
- 老生常谈系列之Aop--AspectJ
老生常谈系列之Aop--AspectJ 这篇文章的目的是大概讲解AspectJ是什么,所以这个文章会花比较长的篇幅去解释一些概念(这对于日常开发来说没一点卵用,但我就是想写),本文主要参考Aspect ...
- Spring3系列12- Spring AOP AspectJ
Spring3系列12- Spring AOP AspectJ 本文讲述使用AspectJ框架实现Spring AOP. 再重复一下Spring AOP中的三个概念, Advice:向程序内部注入的代 ...
- Spring3系列11- Spring AOP——自动创建Proxy
Spring3系列11- Spring AOP——自动创建Proxy 在<Spring3系列9- Spring AOP——Advice>和<Spring3系列10- Spring A ...
随机推荐
- memcached 如何处理容错的?
不处理! 在 memcached 节点失效的情况下,集群没有必要做任何容错处理.如 果发生了节点失效,应对的措施完全取决于用户.节点失效时,下面列出几种方 案供您选择: 忽略它! 在失效节点被恢复或替 ...
- Javascript Promises学习
Promise对象的三个状态 pending(进行中) fulfilled(已成功) rejected(已失败) Promise代表一个异步操作,对象的状态一旦改变,就不会再改变 Promise构造函 ...
- 学习Apache(六)
Apache 是一款使用量排名第一的 web 服务器,LAMP 中的 A 指的就是它.由于其开源.稳定.安全等特性而被广泛使用.下边记录了使用 Apache 以来经常用到的功能,做此梳理,作为日常运维 ...
- C++ | 虚表的写入时机
虚表 在C++的多态机制中,使用了 virtual 关键字声明的函数称之为虚函数,每个有虚函数的类或者虚继承的子类,编译器都会为它生成一个虚拟函数表(简称:虚表,以下用 vftable表示),表中的每 ...
- 巧用CSS3:target 伪类制作Dropdown下拉菜单(无JS)
原文链接:http://devework.com/css3-target-dropdown.html :target 是CSS3 中新增的一个伪类,用以匹配当前页面的URI中某个标志符的目标元素(比如 ...
- uniapp中websokcet封装和使用
1. websocket.js 封装代码 //是否已经连接上ws let isOpenSocket = false //心跳间隔,单位毫秒 let heartBeatDelay = 3000 l ...
- Math类、Random类、System类、BigInteger类、BigDecimal类、Date类、SimpleDateFormat、Calendar类
Math类* A:Math类概述 * Math 类包含用于执行基本数学运算的方法,如初等指数.对数.平方根和三角函数. * B:成员方法 * public static int abs(int a) ...
- EMS邮箱数据库全局监控设置
案例任务:监控TestDB01邮箱数据库的所有邮件,监控邮箱为用户"王淑江"的邮箱. 1.EMS全局监控设置 使用PowerShell完成操作:"王淑江"监控T ...
- vue后台管理系统组件弹窗
//addFormVisibleIcon可在data中设置true与falsehttps://element.eleme.io/#/zh-CN/component/installation <e ...
- 圆桌killer
[问题描述] 圆桌上围坐着2n个人.其中n个人是好人,另外n个人是坏人.如果从第m(m<=2n)个人开始数数,数到第k个人,则立即处死该人:然后从被处死的人之后重新开始数数,再将数到的第k个人处 ...