0
点赞
收藏
分享

微信扫一扫

力扣高频SQL 50 题(基础版)第三题

耶也夜 2024-07-25 阅读 33

目录

🚩代理模式的定义和理解

🚩代理模式的主要⻆⾊

🚩代理模式的分类

🎈静态代理

🎈动态代理

🎓JDK动态代理

📝JDK 动态代理类实现步骤

🎓CGLIB动态代理

📝CGLIB 动态代理类实现步骤

🎈JDK代理和CGLIB代理

🚩Spring AOP总结


上一篇文章我们主要讲述spring AOP的使用,我们现在来讲讲Spring AOP的原理,也就是如何实现Spring AOP的。

Spring AOP是基于动态代理来实现AOP的。


🚩代理模式的定义和理解

代理模式, 也叫委托模式.

为其他对象(房东)提供一种代理(中介)以控制对这个对象访问,作用就是提供一个中介来对买房子的人进行处理。

这就像租房一样

正常的流程是:租户->房东

代理流程:租房->中介->房东  (中介就是代理)


使用代理前:

使用代理后:



🚩代理模式的主要⻆⾊


🚩代理模式的分类

根据代理的创建时期, 代理模式分为 静态代理和动态代理

🎈静态代理

静态代理: 在程序运⾏前, 代理类的 .class⽂件就已经存在了. (在出租房⼦之前, 中介已经做好了相关的⼯作, 就等租⼾来租房⼦了)

我们通过代码来加深理解. 以房租租赁为例

上⾯这个代理实现⽅式就是静态代理(仿佛啥也没⼲).

如果对中介新增卖房代理,那么就要新加接口,并且要再房东类和中介类中加入卖房的实现。

从上述代码可以看出, 我们修改接⼝(Subject)和业务实现类(RealSubject)时, 还需要修改代理类

(Proxy). 同样的, 如果有新增接⼝(Subject)和业务实现类(RealSubject), 也需要对每⼀个业务实现类新增代理类 (Proxy)。

从上述程序可以看出, 虽然静态代理也完成了对⽬标对象的代理, 但是由于代码都写死了, 对⽬标对象的每个⽅法的增强都是⼿动完成的,⾮常不灵活. 所以⽇常开发⼏乎看不到静态代理的场景.

既然代理的流程是⼀样的, 有没有⼀种办法, 让他们通过⼀个代理类来实现呢?

这就需要⽤到动态代理技术了。


🎈动态代理

相⽐于静态代理来说,动态代理更加灵活.

我们不需要针对每个⽬标对象都单独创建⼀个代理对象, ⽽是把这个创建代理对象的⼯作推迟到程序运⾏时由JVM来实现. 也就是说动态代理在程序运⾏时, 根据需要动态创建⽣成

Java也对动态代理进⾏了实现, 并给我们提供了⼀些API, 常⻅的实现⽅式有两种:


🎓JDK动态代理

📝JDK 动态代理类实现步骤


🎓CGLIB动态代理

JDK 动态代理有⼀个最致命的问题是其只能代理实现了接⼝的类

有些场景下, 我们的业务代码是直接实现的, 并没有接⼝定义. 为了解决这个问题, 我们可以⽤ CGLIB 动态代理机制来解决..(也就是说JDK动态代理只能是接口,不能是类)

Spring中的 AOP 模块中: 如果⽬标对象实现了接⼝,则默认采⽤ JDK 动态代理, 否则采⽤ CGLIB 动态代理


📝CGLIB 动态代理类实现步骤


🎈JDK代理和CGLIB代理

📝JDK可以代理接口(HouseSubject),不可以代理类(RealHouseSubject)

📝CGLib可以代理接口(HouseSubject),又可以代理类(RealHouseSubject)


🚩Spring AOP总结


举报

相关推荐

0 条评论