spring容器启动流程(反射视角)

java 复制代码
@Configuration
@ComponentScan
public class AppConfig {
}

public class Application {
    public static void main(String[] args) {
        // 关键入口:将配置类交给Spring容器
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
    }
}
  1. 配置类加载阶段

    • Spring通过反射读取AppConfig.class的元数据

    • 发现@Configuration注解,将其识别为配置类而非普通Bean

    • 解析@ComponentScan注解,获取要扫描的包路径(默认为当前包及其子包)

  2. 类路径扫描阶段

    • Spring使用反射API扫描指定包下的所有.class文件

    • 对每个类进行注解分析:@Component, @Service, @Repository, @Controller

    • 将符合条件的类注册为Bean定义(BeanDefinition)

  3. Bean实例化阶段

    • 通过反射调用无参构造器创建Bean实例:clazz.newInstance()

    • 对于有构造器注入的Bean,反射解析参数类型并注入依赖

  4. 依赖注入阶段

    • 反射遍历所有字段,检查@Autowired注解

    • 通过field.set(beanInstance, dependency)注入依赖

    • 调用@PostConstruct标记的方法完成初始化

  5. Bean后处理阶段

    • 执行BeanPostProcessor进行额外的处理

    • 代理创建(AOP)、属性校验等增强操作

注解是标签:通过反射识别,告诉框架"我是什么"、"我要什么" 🤭

相关推荐
MindUp14 小时前
企业网盘权限模型解析:多层级访问控制与审计能力选型指南
java·linux·运维
Kim_wang14 小时前
agent项目部署流程
人工智能·后端
NG47714 小时前
【软件设计与体系结构】-策略设计模式
java·设计模式·软件工程
程序员天天困14 小时前
优雅记录操作日志:从注解到 SpEL 的全链路实践与开源方案对比
java·后端
战血石LoveYY15 小时前
Integer类型超限,导致数据异常
java·算法
饼干哥哥16 小时前
Vibe Coding 出海首月收割 100+用户爆赚美金,怎么做?
后端·架构·代码规范
大康16 小时前
macOS Homebrew 重装与国内镜像配置手册
后端
行者全栈架构师16 小时前
大模型批量生成代码的质量衰减:为什么 AI 越写越敷衍?根因分析与系统性解决方案
后端·架构·代码规范
乐观的Terry16 小时前
1、为什么要自己造发布系统
java·spring boot·后端·spring cloud·架构
用户EasyAdminBlazor16 小时前
EasyAdminBlazor 第十篇:数据导入导出——批量处理不再麻烦
前端·后端