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)、属性校验等增强操作

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

相关推荐
铁皮饭盒1 小时前
Bun执行python代码
前端·javascript·后端
菜鸟谢1 小时前
Rust 枚举 (enum) 完整核心知识点
后端
晓杰在写后端2 小时前
从0到1实现Balatro游戏后端(9):Blind奖励结算与金币系统实现
后端·游戏开发
Patrick_Wilson2 小时前
幂等到底是什么?从前端视角讲透 SQL、HTTP 与 POST 接口的幂等设计
前端·后端·架构
凌览2 小时前
一人公司别再上 Jenkins,真不值
前端·后端
菜鸟谢2 小时前
Rust 元组与数组内存管理笔记
后端
oil欧哟2 小时前
Codex 最佳实践(超级长文):先搞懂 AI,再用好 AI
前端·人工智能·后端
AskHarries2 小时前
把一个外部系统接成 MCP 工具
后端·程序员
释然小师弟2 小时前
Android开发十年:反思与回顾
android·后端·嵌入式
雪隐2 小时前
个人电脑玩AI-04让5060 Ti给你打工——本地FLUX.2 Klein 的 AI 图片生成
人工智能·后端