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

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

相关推荐
IT_陈寒9 分钟前
React的setState真是个演员,你以为它同步其实在装睡
前端·人工智能·后端
ServBay1 小时前
Claude Fable 5.5 测试曝光,但它在悄悄给你打分
后端·ai编程·claude
w_zero_one2 小时前
递归算法(一)
java·开发语言·算法
IT规划师2 小时前
一文讲透五种发布机制:滚动、蓝绿、金丝雀、红黑与 AB
后端·面试
SL_staff3 小时前
私有化低代码不是减配版开发:JVS双模式建模如何重建IT交付信任
java·低代码·spring cloud
墨着染霜华3 小时前
Redocly 生成 OpenAPI 接口文档踩坑实录|Node 版本兼容 + 接口地址错误问题解决
java
文丑颜不良啊3 小时前
LeetCode1881~1990题目解析
java·leetcode
一条Go3 小时前
两套权限目录,三重闸门:Alioth 的多租户 RBAC 为什么这么拧
后端·程序员·github
Tokenfree4 小时前
把多模态 OCR 接进业务系统:四千张运单,三个坑
后端
十碗饭吃不饱4 小时前
后端运维:网络联通、进程查询、Java服务启动脚本
java·运维·网络