老生常谈系列之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 ...
随机推荐
- Spring Bean生命周期回调
参阅官方文档:https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#beans-factory ...
- JavaScript 焦点事件
焦点事件,当一个元素(比如链接或表单)得到或失去焦点时发生. 实例: 1 <!DOCTYPE html> 2 <html lang="en"> 3 < ...
- Java 中 WeakReference 与 SoftReference 的区别?
虽然 WeakReference 与 SoftReference 都有利于提高 GC 和 内存的效率, 但是 WeakReference ,一旦失去最后一个强引用,就会被 GC 回收,而软引用 虽然不 ...
- _CrtCheckMemory
参考: _CrtCheckMemory MSDN 堆异常检查-MS vs stdio 编写程序经常会涉及到堆的申请,但是如果你向所申请堆里写数据,超过了你最开始申请的空间是,运行中就会发生中断. _C ...
- 《CSS 揭秘》作者Lea Verou:我喜欢分享开源的行业文化
本文仅用于学习和交流,不用于商业目的.非商业转载请注明作译者.出处,并保留本文的原始链接:http://www.ituring.com.cn/art... 访谈嘉宾: Lea VerouW3C CSS ...
- task0002(四)- 练习:数据处理、轮播及交互
转载自我的个人博客 欢迎大家批评指正 包括5部分: 小练习1-处理用户输入 小练习2-日期对象的使用 小练习3:轮播图 小练习4:输入提示框 小练习5:界面拖拽交互 源码地址task0002 在线De ...
- chrome插件one-read开发1:准备
阅读我的博客文章:chrome插件one-read开发:准备 前言 为啥要做这个,因为我原本想用chrome做一个书签管理的东西,但是很久没有碰过chrome的插件开发了.所以先做一个简单的,来熟悉下 ...
- 一个关于小程序与单片机的通信实例(TCP/IP)
前言 这是一个18年初的创业项目的核心功能要求,我们当时打算做一个共享类的项目,项目的主题是共享图书,线下的形式租借图书,我们当时是考虑做一个借书柜的形式,然后线下生产投放借书柜,这些借书柜本身能存放 ...
- ubantu系统之 在桌面添加应用快捷方式
1. 首先在终端使用命令:sudo nautilus 这个命令会让你用root权限打开文件管理器,输入这个命令然后输入密码确认之后会弹出一个目录窗口;2. 然后我们就要找到目录:/usr/share/ ...
- php 实验一 网页设计
实验目的: 1. 能够对整个页面进行html结构设计. 2. 掌握CSS+DIV的应用. 实验内容及要求: ***个人博客网页 参考Internet网上的博客网站,设计自己的个人网页,主要包括:图 ...