Spring核心技术底层实现详解
第一章:IoC容器底层实现
1.1 核心架构
1.2 Bean生命周期
-
实例化(
InstantiationAwareBeanPostProcessor
) -
属性填充(
populateBean()
) -
初始化(
invokeInitMethods()
) -
销毁(
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();}
}
性能优化建议
-
Bean作用域:多用prototype减少锁竞争
-
AOP切点:使用
within()
代替execution()
提升匹配效率 -
循环依赖:避免构造器注入循环
-
懒加载:
@Lazy
延迟非必要Bean初始化 -
配置预处理:使用
@Configuration(proxyBeanMethods=false)