当前位置: 首页 > news >正文

Spring核心技术底层实现详解

第一章:IoC容器底层实现

1.1 核心架构

1.2 Bean生命周期

  1. 实例化(InstantiationAwareBeanPostProcessor

  2. 属性填充(populateBean()

  3. 初始化(invokeInitMethods()

  4. 销毁(DisposableBean

1.3 依赖注入源码

// AbstractAutowireCapableBeanFactory
protected void populateBean(String beanName, RootBeanDefinition mbd, BeanWrapper bw) {// 获取所有属性PropertyValues pvs = mbd.getPropertyValues();if (mbd.getResolvedAutowireMode() == AUTOWIRE_BY_NAME) {autowireByName(beanName, mbd, bw, pvs);}if (mbd.getResolvedAutowireMode() == AUTOWIRE_BY_TYPE) {autowireByType(beanName, mbd, bw, pvs);}
}

第二章:AOP动态代理

2.1 代理模式对比

代理类型启动速度性能限制
JDK动态代理需实现接口
CGLIB无法代理final方法

2.2 代理创建流程

2.3 拦截器链执行

// ReflectiveMethodInvocation
public Object proceed() throws Throwable {if (this.currentInterceptorIndex == this.interceptorsAndDynamicMethodMatchers.size() - 1) {return invokeJoinpoint();}// 获取下一个拦截器Object interceptor = interceptorsAndDynamicMethodMatchers.get(++this.currentInterceptorIndex);if (interceptor instanceof MethodInterceptor) {return ((MethodInterceptor) interceptor).invoke(this);}
}

第三章:事务管理

3.1 事务核心类

public interface PlatformTransactionManager {TransactionStatus getTransaction(TransactionDefinition definition);void commit(TransactionStatus status);void rollback(TransactionStatus status);
}// 事务传播行为
public interface TransactionDefinition {int PROPAGATION_REQUIRED = 0;int PROPAGATION_SUPPORTS = 1;//...
}

3.2 事务拦截器

// TransactionInterceptor
public Object invoke(MethodInvocation invocation) throws Throwable {TransactionInfo txInfo = createTransactionIfNecessary();try {Object retVal = invocation.proceed();commitTransactionAfterReturning(txInfo);return retVal;} catch (Throwable ex) {completeTransactionAfterThrowing(txInfo, ex);throw ex;}
}
第四章:Spring MVC

4.1 请求处理流程

4.2 参数绑定原理

// HandlerMethodArgumentResolver
public interface HandlerMethodArgumentResolver {boolean supportsParameter(MethodParameter parameter);Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception;
}// 实现类示例
public class RequestParamMethodArgumentResolver implements HandlerMethodArgumentResolver {public boolean supportsParameter(MethodParameter parameter) {return parameter.hasParameterAnnotation(RequestParam.class);}
}
第五章:注解驱动原理

5.1 注解处理流程

// ConfigurationClassPostProcessor
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) {processConfigBeanDefinitions(registry);
}private void processConfigBeanDefinitions(BeanDefinitionRegistry registry) {// 1. 解析@Configuration// 2. 处理@ComponentScan// 3. 处理@Import// 4. 处理@Bean方法
}

5.2 条件注解实现

// OnClassCondition
public ConditionOutcome getMatchOutcome(ConditionContext context, AnnotatedTypeMetadata metadata) {String className = (String) metadata.getAnnotationAttributes(ConditionalOnClass.class.getName()).get("value");if (ClassUtils.isPresent(className, context.getClassLoader())) {return ConditionOutcome.match();}return ConditionOutcome.noMatch("Required class not found: " + className);
}

关键图解合集

图1:IoC容器类关系

图2:AOP代理执行流程

图3:事务传播机制

完整示例:自定义BeanPostProcessor

public class CustomBeanPostProcessor implements BeanPostProcessor {@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) {System.out.println("初始化前处理: " + beanName);if (bean instanceof UserService) {((UserService) bean).setTag("V1.0");}return bean;}@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) {System.out.println("初始化后处理: " + beanName);return Proxy.newProxyInstance(bean.getClass().getClassLoader(),bean.getClass().getInterfaces(),(proxy, method, args) -> {System.out.println("代理方法: " + method.getName());return method.invoke(bean, args);});}
}// 配置类
@Configuration
public class AppConfig {@Beanpublic static CustomBeanPostProcessor customBeanPostProcessor() {return new CustomBeanPostProcessor();}
}

性能优化建议

  1. Bean作用域:多用prototype减少锁竞争

  2. AOP切点:使用within()代替execution()提升匹配效率

  3. 循环依赖:避免构造器注入循环

  4. 懒加载@Lazy延迟非必要Bean初始化

  5. 配置预处理:使用@Configuration(proxyBeanMethods=false)​​​​​​​

相关文章:

  • 在AI时代看清糖网:糖尿病视网膜病变筛查的转型之路
  • 软件设计模式期末复习模拟解析
  • DMDRS部署实施手册(ORACLE=》DM)
  • MySQL与Oracle视图:深入解析与全面对比
  • 设计模式 - 工厂方法
  • 科技资讯杂志科技资讯杂志社科技资讯编辑部2025年第9期目录
  • Android平台低延迟RTSP播放器架构设计解析
  • Java数据结构第二十四期:探秘 AVL 树,当二叉搜索树学会 “自我调节”
  • 图像处理基础篇
  • VR看房:房地产数字化转型的核心引擎
  • SpringBoot+Vue自习室座位预约系统
  • 零基础学习RabbitMQ(1)--概述
  • 在cursor中,配置jdk和maven环境,安装拓展插件
  • 驯服AI巨兽的秘密武器
  • 商品中心—11.商品B端搜索系统的实现文档一
  • Linux运维新人自用笔记(inode索引节点、删除文件原理、raid10、lvm逻辑卷)
  • 用安卓手机,怎样远程管理孩子iPhone屏幕使用时间?
  • npm ci对比npm install
  • xss利用meta强制跳转 CPS report-uri 报错泄露利用 -- GPN CTF 2025 Free Parking Network 1 2
  • vue-23(创建用于逻辑提取的可重用组合组件)
  • Git page wordpress/百度词条优化工作
  • 网站开发要会英语吗/百度搜索引擎优化的推广计划
  • 宣讲家网站两学一做心得体会/seo课程简介
  • angularjs 网站开发/深圳营销型网站
  • wap网址是什么意思/上海seo优化公司 kinglink
  • 服饰网站建设/淘宝定向推广