Spring核心源码学习

我们学习spring源码最好的方式就是阅读较早的版本,早期版本代码结构简单,模块较少,使得初学者能将更多的精力放在spring的核心原理上。本文使用的源码为0.9.1版本。源码下载地址:

git@gitee.com:limengg/spring-0.9.1-annotated.git

下载完成后,使用开发工具导入项目,就可以进行代码的跟着调试了。

代码结构如下图所示:

源码中带有测试用例:Test。在Test的useFactoryTest方法中,展示了加载一个bean的加载、获取和使用的过程。

 

Test类测试代码:

String file = "/Users/limeng/code/SRC_CODE/spring-0.9.1-annotated/src/test/resources/pets.xml";

XmlBeanFactory fac = new XmlBeanFactory(file, null);

// Find bean isabelle

Owner isabelle = (Owner)fac.getBean("isabelle");

System.out.println("Found bean: " + isabelle.getName() + " with pets: ");

ListIterator iter = isabelle.getPets().listIterator();

while (iter.hasNext()) {

    IPet pet = (IPet) iter.next();

    ISpecies sp = pet.getSpecies();

    System.out.println(pet.getName() + " of species " + sp.getName());

}

我们把断点打在创建XmlBeanFactory这一行。

XmlBeanFactory fac = new XmlBeanFactory(file, null);

XmlBeanFactory的构造有两个参数,第一个为bean定义的xml文件路径,第二个参数为要加载的bean的父BeanFactory。启动测试类后,进入XmlBeanFactory构造函数。构造函数如下:

public XmlBeanFactory(String filename, BeanFactory parentBeanFactory) throws BeansException {

   super(parentBeanFactory);

   loadBeanDefinitions(filename);

}

构造方法中一共做了两件事。首先调用父类构造函数,调用路径为 XmlBeanFactory -> ListableBeanFactoryImpl -> AbstractBeanFactory.

最终,AbstractBeanFactory将传入的父BeanFactory进行保存。

然后来到构建BeanFactory初始化代码的第二行:加载bean的定义。将断点打在这一行,并调试进入loadBeanDefinitions方法实现。

loadBe

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值