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 分钟前
Vue刷新页面数据重置?一招解决Vuex状态丢失
后端
楚兴4 分钟前
ACP 到底解决了什么?让 IDE 和 Coding Agent 解耦
人工智能·后端·架构
楚兴13 分钟前
DeepSeek Harness 到底在做什么?拆开 Agent 的运行时
人工智能·后端·架构
名字还没想好☜20 分钟前
Go 标准库 flag 包实战:参数解析、子命令、自定义 Value 类型与默认值
开发语言·后端·golang·go
米花米唐22 分钟前
Spring AI 2.0 MCP服务器搭建与使用
后端
程序猿DD38 分钟前
OctaFuse Gateway 2.9.0:用户限流控制、自定义转发头与管理后台升级
后端·api
三千星39 分钟前
Java开发者转型AI工程化Week 5:让RAG学会思考、看见与自检
后端
一个Ai的杂货铺42 分钟前
exit 0 也会撒谎:一个"绿灯盲跑"了一个月的定时任务,尸检报告
后端
hfywmsj42 分钟前
广州餐饮铺位招租的选址架构:流量入口与成本函数分析
java·大数据·jvm·广州餐饮铺位招租
北漂EDA码路43 分钟前
现代 C++20:move、forward 与完美转发,EDA 大型程序为什么离不开它
后端