自己动手写spring(九) 总结

前言

作为一个使用轮子的程序员第一次写了轮子,感觉还是满兴奋的。笔者在看很多项目的源码时,经常是看了忘,忘了看。在反思这个现象时,笔者认为:很多代码固然很精巧,但因为读者没有设身处地考虑过实际的情景,对为什么要这样做没有直接的感觉,导致印象不深刻。

还有一个重要原因是,大部分框架的代码在发展过程中都经过重新设计,这固然必要,但判空、处理异常以及复杂的父子关系等掩盖了最初的思路,容易将读者带入到细节中。

最后,笔者前一阵在学习《How tomcat works》,对作者讲述tomcat的方式深以为然,因此就萌生了自己实现一个框架的想法。尽量少的判空、几乎没有异常处理(方法几乎全部是throw Exception),将最初的思路最直接的呈现在读者面前,帮大家找到感觉:spring也是这样一步步写出来的。

该框架的重点

重要的是三个map

框架中两个品类的组件,BeanFactory和BeanProcessor全部是基于这个三个map在做处理,理解了这三个map,就理解了整个框架。

  1. beanId2Bean,beanId与bean在配置文件(和注解)中信息的映射
  2. beanId2Clazz,beanId与bean的Class对象的映射
  3. beanId2Class,beanid与bean实例的映射

有了这三个map,beanFactory在执行getBean(beanId)时,便可以根据beanId拿到其配置信息,创建实例,并将创建的实例保存到beanId2Class中(以备下次使用)。

构建bean的艺术

书上讲依赖注入,AOP(其实还可以加上工厂bean)是spring的两个基本特性。其实是一个,它们都是一个关于如何构建bean的技术,beanFactory隐藏了创建Bean的细节。

假设BeanFactory是一个真的工厂,它的产品是bean,该工厂主要有以下工艺来生产Bean:

  1. clazz.newInstance, 直接根据Class对象创建
  2. factoryBean.getObject,向其它工厂”订货”
  3. Proxy.xxxx,由Proxy组装
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值