手写Spring框架-第二弹
用设计模式,实现 Bean 的定义注册获取
-
理解设计模式:
-
编码方式主要依托于:接口定义 || 类实现接口、抽象类实现接口 || 继承类、继承抽象类,而这些操作方式可以很好的隔离开每个类的基础功能、通用功能和业务功能,当类的职责清晰后,你的整个设计也会变得容易扩展和迭代。
-
接口和抽象类的区别,接口是实现,抽象类是为了继承。
-
-
设计:
- 注册只注册类信息(Object变Class)-》 getBean时处理实例化+判断单例对象是否在容器中缓存。
实现:
map用来存放definition定义额,Singleton存放的是对象本身。
-
Exception处理
- 定义BeansException类,继承RuntimeException。
- (msg) (msg, e) 调用上面的构造方法
-
第一步:Bean的类定义
- Bean中存放的是对象的类,改用Class
- 实例化操作转交给容器。
-
BeanFactory 接口:
- 定义了普通的getBean方法
-
单例注册 接口 定义和实现
-
SingletonBeanRegistry接口定义行为。
-
DefaultSingletonBeanRegistry 类来 实现接口
-
-
一个protected 的 addSingleton 方法,这个方法可以被继承此类的其他类调用(本类和子类。 )
-
-
-
AbstractBeanFactory -- 抽象类 定义模板方法
-
目的
-
实现了BeanFactory接口,实现了getBean方法
-
继承了单例的注册addSingleton 和 getSingleton方法
- getBean默认调用singleton,不成功就创建一个。
- 缓存中没有
-
-
-
-
实例化Bean类(AbstractAutowireCapableBeanFactory) 抽象类
-
继承上面的抽象类,并实现了creatBean方法
-
-
流程:通过Class的newInstance 调用默认构造方法(无参构造)即可。
- 然后用addSingleton 增加到单例map中
-
-
核心类实现(DefaultListableBeanFactory)
-
最后Factory实现注册和获取
-
注册要实现接口,BeanDefinitionRegistry中的方法
-
-
这里用hashMap存储:HashMap
-
__EOF__

本文作者:userName
本文链接:https://www.cnblogs.com/Blunt-Raz0r/p/17817489.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/Blunt-Raz0r/p/17817489.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~