Spring AOP底层原理
Spring AOP 通过动态代理实现横向切面功能。若目标对象实现接口,Spring 使用 JDK Proxy 创建与接口同级的代理对象;若未实现接口,则采用 CGLIB 生成目标类的子类作为代理。代理对象在运行时拦截方法调用,实现与原实现类相同的功能,而无需修改源代码,从而完成 AOP 的横向扩展。
这个话题下有 38 篇手记。
Spring AOP 通过动态代理实现横向切面功能。若目标对象实现接口,Spring 使用 JDK Proxy 创建与接口同级的代理对象;若未实现接口,则采用 CGLIB 生成目标类的子类作为代理。代理对象在运行时拦截方法调用,实现与原实现类相同的功能,而无需修改源代码,从而完成 AOP 的横向扩展。
微服务启动后,内置的 Nacos 客户端每 5 秒向 Nacos 服务器的 /nacos/v1/ns/instance/beat 接口发送一次心跳,携带实例名称、IP、端口、集群、权重等信息。服务器的 naming 模块收到心跳后,先依据 IP+端口判断实例是否已存在;不存在则在实例 Map 中注册;已存在则记录本次心跳时间、标记为健康并推送状态变更消息,随后返回新的心跳间隔。为防止无效实例长期占用,Nacos 每 20 秒扫描实例 Map,将“非健康”实例剔除。这样实现了服务实例的实时注册、健康监测与自动清理。