-
静态代理
-
什么是静态代理
- 由程序创建或特定工具自动生成源代码,在程序运行前,代理类的.class文件就已经存在
- 通过将目标类与代理类实现同一个接口,让代理类持有真实类对象,然后在代理类方法中调用真实类方法,在调用真实类方法的前后添加我们所需要的功能扩展代码来达到增强的目的
- A -> B -> C
-
优点
- 代理使客户端不需要知道实现类是什么,怎么做的,而客户端只需知道代理即可
- 方便增加功能,拓展业务逻辑
-
缺点
- 代理类中出现大量冗余的代码,非常不利于扩展和维护
- 如果接口增加一个方法,除了所有实现类需要实现这个方法外,所有代理类也需要实现此方法。增加了代码维护的复杂度
-
-
动态代理
- 在程序运行时,运用反射机制动态创建而成,无需手动编写代码
- SpringAOP里面常用的是 JDK动态代理、CGLIB动态代理
- JDK动态代理,要求目标对象实现一个接口,但是有时候目标对象只是一个单独的对象,并没有实现任何的接口,这个时候就可以用CGLib动态代理
- JDK动态代理是自带的,CGlib需要引入第三方包
- CGLib动态代理,它是在内存中构建一个子类对象从而实现对目标对象功能的扩展
- CGLib动态代理基于继承来实现代理,所以无法对final类、private方法和static方法实现代理
-
Spring AOP中的代理使用的默认策略?
- 如果目标对象实现了接口,则默认采用JDK动态代理
- 如果目标对象没有实现接口,则采用CgLib进行动态代理
- 如果目标对象实现了接口,程序里面依旧可以指定使用CGlib动态代理
静态代理和动态代理
最新推荐文章于 2025-05-29 21:59:16 发布