小马哥讲 Spring AOP 编程思想
小马哥
《Spring Boot 编程思想》作者、Spring Cloud Alibaba 项目架构师
11271 人已学习
新⼈⾸单¥68
课程目录
已完结/共 114 讲
第一章:Spring AOP总览 (21讲)
时长 04:08
时长 10:58
第三章:Spring AOP API设计与实现 (49讲)
小马哥讲 Spring AOP 编程思想
登录|注册
留言
9
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 17 | CGLIB动态代理:为什么Java动态代理无法满足AOP的需要?
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.75x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
01 | 课程介绍
02 | 内容综述
03 | 知识储备:基础、基础,还是基础!
04 | AOP引入:OOP存在哪些局限性?
05 | AOP常见使用场景
06 | AOP概念:Aspect、Join Point和Advice等术语应该如何理解?
07 | Java AOP设计模式:代理、判断和拦截器模式
08 | Java AOP代理模式(Proxy):Java静态代理和动态代理的区别是什么?
09 | Java AOP判断模式(Predicate):如何筛选Join Point?
10 | Java AOP拦截器模式(Interceptor):拦截执行分别代表什么?
11 | Spring AOP 功能概述:核心特性、编程模型和使用限制
12 | Spring AOP编程模型:注解驱动、XML配置驱动和底层API
13 | Spring AOP设计目标:Spring AOP与 AOP框架之间的关系是竞争还是互补?
14 | Spring AOP Advice类型:Spring AOP丰富了哪些AOP Advice呢?
15 | Spring AOP代理实现:为什么Spring Framework选择三种不同AOP实现?
16 | JDK动态代理:为什么Proxy.newProxyInstance会生成新的字节码?
17 | CGLIB动态代理:为什么Java动态代理无法满足AOP的需要?
18 | AspectJ代理代理:为什么Spring推荐AspectJ注解?
19 | AspectJ基础:Aspect、Join Points、Pointcuts和Advice语法和特性
20 | AspectJ注解驱动:注解能完全替代AspectJ语言吗?
21 | 面试题精选
22 | Spring核心基础:《小马哥讲Spring核心编程思想》还记得多少?
23 | @AspectJ注解驱动
24 | 编程方式创建 @AspectJ代理
25 | XML配置驱动 - 创建AOP代理
26 | 标准代理工厂API - ProxyFactory
27 | @AspectJ Pointcut指令与表达式:为什么Spring只能有限支持?
28 | XML配置Pointcut
29 | API实现Pointcut
30 | @AspectJ拦截动作:@Around与@Pointcut有区别吗?
31 | XML配置Around Advice
32 | API实现Around Advice
33 | @AspectJ前置动作:@Before与@Around谁优先级执行?
34 | XML配置Before Advice
35 | API实现Before Advice
36 | @AspectJ后置动作 - 三种After Advice之间的关系?
37 | XML配置三种After Advice
38 | API实现三种After Advice
39 | 自动动态代理
40 | 替换TargetSource
41 | 面试题精选
42 | Spring AOP API整体设计
43 | 接入点接口 - Joinpoint
44 | Joinpoint条件接口 - Pointcut
45 | Pointcut操作 - ComposablePointcut
46 | Pointcut便利实现
47 | Pointcut AspectJ实现 - AspectJExpressionPointcut
48 | Joinpoint执行动作接口 - Advice
49 | Joinpoint Before Advice标准实现
50 | Joinpoint Before Advice AspectJ实现
51 | Joinpoint After Advice标准实现
52 | Joinpoint After Advice AspectJ实现
53 | Advice容器接口 - Advisor
54 | Pointcut与Advice连接器 - PointcutAdvisor
55 | Introduction与Advice连接器 - IntroductionAdvisor
56 | Advisor的Interceptor适配器 - AdvisorAdapter
57 | AdvisorAdapter实现
58 | AOP代理接口 - AopProxy
59 | AopProxy工厂接口与实现
60 | JDK AopProxy实现 - JdkDynamicAopProxy
61 | CGLIB AopProxy实现 - CglibAopProxy
62 | AopProxyFactory配置管理器 - AdvisedSupport
63 | Advisor链工厂接口与实现 - AdvisorChainFactory
64 | 目标对象来源接口与实现 - TargetSource
65 | 代理对象创建基础类 - ProxyCreatorSupport
66 | AdvisedSupport事件监听器 - AdvisedSupportListener
67 | ProxyCreatorSupport标准实现 - ProxyFactory
68 | ProxyCreatorSupport IoC容器实现 - ProxyFactoryBean
69 | ProxyCreatorSupport AspectJ实现 - AspectJProxyFactory
70 | IoC容器自动代理抽象 - AbstractAutoProxyCreator
71 | IoC容器自动代理标准实现
72 | IoC容器自动代理 AspectJ 实现 - AspectJAwareAdvisorAutoProxyCreator
73 | AOP Infrastructure Bean接口 - AopInfrastructureBean
74 | AOP上下文辅助类 - AopContext
75 | 代理工厂工具类 - AopProxyUtils
76 | AOP工具类 - AopUtils
77 | AspectJ Enable模块驱动实现 - @EnableAspectJAutoProxy
78 | AspectJ XML配置驱动实现 - <aop:aspectj-autoproxy/>
79 | AOP配置Schema-based 实现 - <aop:config/>
80 | Aspect Schema-based实现 - <aop:aspect/>
81 | Pointcut Schema-based实现 - <aop:pointcut/>
82 | Around Advice Schema-based实现 - <aop:around/>
83 | Before Advice Schema-based实现 - <aop:before/>
84 | After Advice Schema-based实现 - <aop:after/>
85 | After Returning Advice Schema-based实现 - <aop:after-returning/>
86 | After Throwing Advice Schema-based实现 - <aop:after-throwing/>
87 | Adviser Schema-based实现 - <aop:advisor/>
88 | Introduction Schema-based实现 - <aop:declare-parents/>
89 | 作用域代理Schema-based实现 - <aop:scoped-proxy/>
90 | 面试题精选
91 | 抽象工厂模式(Abstract factory)实现
92 | 构建器模式(Builder)实现
93 | 工厂方法模式(Factory method)实现
94 | 原型模式(Prototype)实现
95 | 单例模式(Singleton)实现
96 | 适配器模式(Adapter)实现
97 | 组合模式(Composite)实现
98 | 装饰器模式(Decorator)实现
99 | 享元模式(Flyweight)实现
100 | 代理模式(Proxy)实现
101 | 模板方法模式(Template Method)实现
102 | 责任链模式(Chain of Responsibility)实现
103 | 观察者模式(Observer)实现
104 | 策略模式(Strategy)实现
105 | 命令模式(Command)实现
106 | 状态模式(State)实现
107 | 面试题精选
108 | Spring AOP在 Spring 事件(Events)
109 | Spring AOP在Spring 事务(Transactions)理论基础
110 | Spring AOP在Spring 事务(Transactions)源码分析
111 | Spring AOP在Spring 缓存(Caching)
112 | Spring AOP在Spring本地调度(Scheduling)
113 | 面试题精选
114 | 结束语
本节摘要
登录 后留言

全部留言(9)

  • 最新
  • 精选
三棵树
示例中不指定interface也可以正常运行,指定interface的作用是?enhancer.setInterfaces()

作者回复: 早期的Cglib就实现了接口的动态代理,JDK 是后来者居山了

2022-01-08
2
mojo
老师好,我看了下cglib生成的代码和生成代码的逻辑,不太明白为什么需要使用private static final ThreadLocal CGLIB$THREAD_CALLBACKS;这样一个threadlocal去传递用户设置的method intercept callback对象(在生成类实例的构造函数中传递绑定CGLIB$BIND_CALLBACKS(this)) 如果在cglib生成代码时生成一个setCallBack方法且实例化后,也是可以达到把method intercept callback绑定到生成的proxy实例属性上的目的

作者回复: 这个 ThreadLocal 存储 Callback[] 的功能主要用于构造器拦截

2021-06-30
2
1
佑儿
CGLIB代理实现: CGLIB能够代理普通类 ,CGLIB使用ASM框架直接对字节码进行操作,在类的执行过程中比较高效

作者回复: 👍

2022-01-13
佑儿
JDK动态代理:只能针对interface进行动态代理,无法对普通类进行动态代理,Java动态代理使用Java原生的反射API进行操作,在生成类上比较高效;

作者回复: 👍

2022-01-13
Geek_5aec96
小马哥 想问下jdk和cglib的运行性能的比较?

作者回复: CGLIB 会略优于 JDK 动态代理

2021-05-08
2
Geek_9d1fc3
方法执行耗时16ms,小马哥的电脑需要cglib提升一下了。

作者回复: 哈哈~

2021-03-26
姑射仙人
小马哥,ConfigurationClass为什么要被字节码提升?在ConfigurationClass中定义@Bean,这些Bean会被注册。但ConfigurationClass本身也不需要AOP特性,被注册为Bean也没啥用。还有,在Spring中定义的所有业务Bean都会被JDK动态代理或者CGLIB字节码提升吗?

作者回复: 实际上,Configuration Class 是方便 AOP 代理 Bean,否则需要打开 proxyTargetClass 来讲筛选的 Bean 设置为 CGLIB 代理。

2021-02-24
2
sljoai
老师,请问一下: 为啥两次执行CGLibDemo打印的结果会不一样呢(除去时间上的差异),第一次明显打印比第二次多不少内容?

作者回复: 我本地是一样的

2021-02-22
3
mgm🍂
有个疑问,需要代理实现接口的非接口方法是否也是要通过CGLIB代理?

作者回复: 比如?

2020-12-28
4
收起评论