Spring AOP/IOC实现原理(2)
Spring
这意味着CGLIB动态代理可以覆盖JDK动态代理的所有场景,而JDK动态代理不能覆盖CGLIB动态代理的所有场景。
因此,为了保证SpringBoot中的AOP(面向切面编程)功能可以应用于任何类型的Bean(无论它是否实现了接口),SpringBoot默认使用CGLIB作为代理的实现方式。
- 性能:
CGLIB动态代理在生成代理对象时需要消耗更多的时间和内存资源,因为它需要操作字节码;而JDK动态代理在生成代理对象时相对较快,因为它只需要操作反射。
但是,在执行代理方法时,CGLIB动态代理比JDK动态代理要快得多,因为它直接调用目标方法,而不需要通过反射。
而在SpringBoot中,通常只会在容器启动时生成一次代理对象,并缓存起来;而在运行时会频繁地执行代理方法。因此,在整体性能上,CGLIB动态代理比JDK动态代理要优越。
什么是JDK代理?
JDK动态代理是通过反射机制来实现的,它要求目标类必须实现一个或多个接口,然后通过java.lang.reflect.Proxy类来创建代理对象,并通过 java.lang.reflect.InvocationHandler接口来实现方法的拦截和增强。
什么是CGLIB?
CGLIB是一种基于ASM的代码生成库,它可以在运行时动态地生成和修改Java字节码,从而实现对Java类和接口的扩展和代理。CGLIB是一种高性能、高质量的代码生成工具,被广泛应用于Hibernate、Spring AOP等框架中。
CGLIB动态代理是通过继承机制来实现的,它不要求目标类必须实现接口,而是通过 net.sf.cglib.proxy.Enhancer类来创建子类对象作为代理对象,并通过net.sf.cglib.proxy.MethodInterceptor接口来实现方法的拦截和增强。
Spring AOP在业务中常见的使用方式
在实际业务场景中AOP的使用频率还是很高的,比如:
- 一个系统离不开监控,监控基本的的指标有QPS、RT、ERROR等等。只要利用注解+AOP的方式封装一套,主要方法/类上带有自定义的注解,方法被调用时,就会上报你想要的相关监控指标。实现了非业务代码与业务代码分离的效果。

IOC
什么是IOC
从个人理解简述来说:Spring IOC解决的是对象管理和对象依赖的问题。以前我们是自己手动new出来的对象,现在则是可以将对象交给Spring的IOC容器进行管理。
IOC容器可以简单理解为一个对象工厂,我们都把该对象交给工厂,工厂管理这些对象的创建以及依赖关系,等我们需要的时候,从工厂里边获取就好了。
IOC的两个重要概念
IOC有两个重要的概念就是控制反转和依赖注入。
- 控制反转:指的就是将原有的自己掌控的事交给别人处理,其体现更多的是一种思想或者可以理解为设计模式。
相关阅读
-
二阶段提交的优缺点有哪些? 二阶段提交的利弊分析
这些知识你了解吗?二阶段提交的优缺点有哪些的电脑方面的小经验,接下来小编为网友介绍。 二阶段提交协议(Two-phase commit protocol),简称 2PC。 两阶段提交是一种强一致性事务协议,它分
-
SSL协议是什么 SSL协议是什么协议
你是不是想知道SSL协议是什么的相关知识,SSL协议是一种加密网络通信安全协议,是Web浏览器与Web服务器之间安全交换信息的协议,具有数据加密、完整性校验及身份验证功能,保障网络数据传
-
OSPF协议有哪些基本特征 什么是OSPF协议
IT袋网网小编为你介绍OSPF协议有哪些基本特征的内容,下面来一起了解一下吧。 OSPF(Open Shortest Path First,开发最短链路优先)作为一种内部网关协议(Interior Gateway Protocl,IGP),用于在同一个自
-
线程的五种状态 五种线程状态:了解并管理线程的状态转换
为大家介绍的是线程的五种状态的电脑小知识,接下来IT袋网小编就来介绍。 五种状态的说法来自于操作系统层面的划分 运行态 :分到 cpu 时间,能真正执行线程内代码的 就绪态 :有资格分


