什么是AOP

面试中经常被问到什么是AOP,其实AOP是一种技术实现,或者说是一种实现标准,实现AOP的技术有多种,但是通常所说的AOP,大家会不自觉的想到spring aop,因为spring aop被问了很多次。本文想从源码的执行流程上来简单说说AOP的实现原理。

AOP底层技术实现

aop的底层技术其实就是大家熟知的代理,spring aop中的代理主要有两种,cglib代理和JDK动态代理,这两种代理的使用场景有所不同,如果被代理的类实现了接口,就使用JDK动态代理,否则就是cglib代理,当然这是默认情况下,否则可以通过修改相关的参数强制使用cglib代理

简单代码实现

下面先通过一个简单的案例来体验一下aop的实现,代码比较简单,下面直接贴出来:

1、MainConfig ,全局扫描类

@ComponentScan("com.congge.stu2")
@EnableAspectJAutoProxy
public class MainConfig {}

2、StudentService,被spring扫描的类

@Component
public class StudentService{public void queryStudent() {System.out.println("执行查询");}
}

3、AOP配置类

spring aop源码分析相关推荐

  1. Spring AOP 源码分析 - 拦截器链的执行过程

    1.简介 本篇文章是 AOP 源码分析系列文章的最后一篇文章,在前面的两篇文章中,我分别介绍了 Spring AOP 是如何为目标 bean 筛选合适的通知器,以及如何创建代理对象的过程.现在我们的得 ...

  2. Spring AOP 源码分析 - 创建代理对象

    1.简介 在上一篇文章中,我分析了 Spring 是如何为目标 bean 筛选合适的通知器的.现在通知器选好了,接下来就要通过代理的方式将通知器(Advisor)所持有的通知(Advice)织入到 b ...

  3. Spring AOP 源码分析 - 筛选合适的通知器

    1.简介 从本篇文章开始,我将会对 Spring AOP 部分的源码进行分析.本文是 Spring AOP 源码分析系列文章的第二篇,本文主要分析 Spring AOP 是如何为目标 bean 筛选出 ...

  4. spring AOP源码分析(一)

    spring AOP源码分析(一) 对于springAOP的源码分析,我打算分三部分来讲解:1.配置文件的解析,解析为BeanDefination和其他信息然后注册到BeanFactory中:2.为目 ...

  5. 一步一步手绘Spring AOP运行时序图(Spring AOP 源码分析)

    相关内容: 架构师系列内容:架构师学习笔记(持续更新) 一步一步手绘Spring IOC运行时序图一(Spring 核心容器 IOC初始化过程) 一步一步手绘Spring IOC运行时序图二(基于XM ...

  6. 【Spring】Spring AOP源码分析-导读(一)

    文章目录 1.简介 2.AOP 原理 3.AOP 术语及相应的实现 3.1 连接点 - Joinpoint 3.2 切点 - Pointcut 3.3 通知 - Advice 3.4 切面 - Asp ...

  7. Spring AOP源码分析(八)SpringAOP要注意的地方

    2019独角兽企业重金招聘Python工程师标准>>> SpringAOP要注意的地方有很多,下面就举一个,之后想到了再列出来: (1)SpringAOP对于最外层的函数只拦截pub ...

  8. Spring AOP源码分析(七)ProxyFactoryBean介绍

    2019独角兽企业重金招聘Python工程师标准>>> 这篇文章里面就要说说Spring自己的AOP,搞清楚哪种方式是Spring自己实现的AOP,哪种方式是Spring引入aspe ...

  9. Spring AOP源码分析(四)Spring AOP的JDK动态代理

    2019独角兽企业重金招聘Python工程师标准>>> 本篇文章将会介绍上一个例子中的源码执行情况,从中熟悉整个SpringAOP的一些概念和接口设计. 首先整个SpringAOP的 ...

  10. Spring AOP源码分析二

    上一篇中,我们已经找到了AOP的源码入口,我们今天继续分析下面的代码,不过在此之前我们需要看下Spring中如何使用切面的,以便于我们理解我们的源码.代码如下: package com.younger ...

最新文章

  1. 通信测试:5G 时代的“卖水人”
  2. .NET程序员的C情结(二)
  3. dedecms 会员网站UID注册名转MID
  4. sql之left join、right join、inner join的区别,连接自己时的查询结果测试
  5. SQL基础---SQL ORDER BY 子句
  6. Intellij IDEA -01 如何配置项目!
  7. Eclipse 导入项目乱码问题
  8. 数据科学包5- pandas基础之基础运算
  9. Unity3D学习笔记(二十七):MVC框架下的背包系统(2)
  10. 蚂蚁课堂-第四期-基于SpringCloud构建微服务电商项目 (无密) 解压密码是多少
  11. Python使用quote、unquote、urlencode、urldecode对url编码解码
  12. 雷达波位编排matlab仿真
  13. U-Boot中ubi和ubifs命令的使用
  14. idea--Preferences
  15. 文氏桥振荡电路多类分析 LM386 DZ006套件
  16. 22南工计算机学院新生培训最终章---ACM竞赛机制
  17. 数据结构和算法 | 第一部分第二课:小鸭子们去旅行
  18. java实现png有损压缩
  19. ​几张图看懂区块链到底是什么?
  20. linux查看u盘的分区,linux磁盘管理——识别和使用u盘

热门文章

  1. Disabling contextual LOB creation as createClob()
  2. 工厂模式之消除switch/case语句
  3. 统计图学习-类型介绍
  4. 解读|数据分析的发展和演变经过哪几个阶段
  5. 黄聪:Wordpress程序Mysql查询导致CPU100%,页面错误增量飙高解决方案
  6. Web开发与设计之Google兵器谱-Web开发与设计利器
  7. Vista初级使用技巧及故障总结
  8. 接到骗子短信后........
  9. Elasticsearch的倒排索引是什么?
  10. 基本操作:Go创建GraphQL API