spring Bean的创建流程(简单版)
1.整体流程
- -》getBean方法
- -》构造推断(无参还是有参)
- -》普通对象
- -》依赖注入(@Autowire)
- -》初始化前(@PostConstruct)
- -》初始化(是否实现了initializationBean,重写aftePropertySet方法)
- -》初始化后(AOP)
- -》代理对象
- -》单例池(是否单例)
- -》返回Bean
2.构造方法推断
- 默认是无参构造
- 当只存在1个有参构造时,采用有参构造
- 当显示的写了有参构造和无参构造,采用无参构造
- 当有多个有参构造而没有无参构造时,报错
3.依赖注入
采用先byType后byName确定要注入的Bean,@Autowire注解可以卸载成员变量或者成员方法上(对参数进行注入)
- 如果类型一致的Bean在容器中只有1个,直接返回
- 如果类型一致的Bean有多个,再次筛选名称,只有1个可以返回
- 如果类型一致的Bean有多个,再次筛选名称,有多个相同名称的则报错
3.单例Bean和单例模式的区别?
单例Bean是使用一个Map实现的 <key:“beanName”,value:“beanObject”>, 相同类型并且相同名称的Bean在Spring容器中只有1个
单例模式:java中最简单的设计模式,属于创建型模式,提供了创建对象的最佳方式
实现:单例类创建对象,确保只有单个对象被创建,并且提供这个单例的全局访问点
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程