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

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

相关推荐
一枚ABAPer3 分钟前
SAP ABAP 如何读取FTP读取CSV文件到内表
后端
苏三的开发日记7 分钟前
grafana里面怎么添加Prometheus数据源监控MySQL
后端
找不到对象就NEW一个9 分钟前
wechatapi,微信二次开发-连载篇(二)通讯录模块
后端·微信
用户37215742613512 分钟前
使用 Java 删除 Word 文档中的水印
java
艾斯比的日常12 分钟前
Java 三色标记算法:并发垃圾回收的核心技术解析
java·开发语言·算法
Y***985121 分钟前
【学术会议论文投稿】Spring Boot实战:零基础打造你的Web应用新纪元
前端·spring boot·后端
空空kkk24 分钟前
MyBatis——代理Dao方式的增删改查操作
java·数据库·mybatis
Seven9734 分钟前
线性数据结构
java
带刺的坐椅37 分钟前
Solon 不依赖 Java EE 是其最有价值的设计!
java·spring·web·solon·javaee
q***333739 分钟前
SpringMVC新版本踩坑[已解决]
android·前端·后端