手写一个spring框架(内含手写源码)

最近详细阅读了spring的框架,从简单的配置到注解,从加载到运行,从返回简单string到返回视图,看的很慢。有不理解的地方就一次又一次debug流程,梳理运行过程和调用的方法。为了加深当前对spring的理解,也防止以后遗忘,又花了几天时间把写了一个迷你版的spring框架。迷你spring已经实现了注解和视图,支持tomcat运行和main方法直接调用。代码都上传到了github,请大家下载点星,感谢!!

github地址:https://github.com/SeasonPanPan/myspring

先看以下spring源码中的类关系图:

我认为spring源码中最核心的类是AbstractApplicationContext,这个类中的refresh方法做的11大步骤,我已经在myspring中注释了。

	/**
	 * 在spring源码中,refresh方法做了以下事情:<br>
	 *
	 * 1、刷新上下文;
	 * 2、初始化BeanFactory,获取bean工厂,这里会解析XML文件;
	 * 3、对BeanFactory的各种功能进行填充,如注解;
	 * 4、激活各种BeanFactory处理器;
	 * 5、注册拦截Bean创建的Bean处理器;
	 * 6、初始化上下文中的资源文件;
	 * 7、初始化上下文事件广播器;
	 * 8、给子类扩展初始化其他Bean;
	 * 9、在所有bean中查找listener bean并注册;
	 * 10、实例化所有非惰性加载的bean;
	 * 11、结束:广播事件,这里面对url做了映射。 
	 * 
	 * 我们简化处理重要的步骤:解析XML,注册bean,实例化bean,保存URL映射关系
	 *
	 * @throws Exception
	 */
	@Override
	public void refresh() {
        ... //省略代码
    }

myspring代码中也尽量使用了源码的重要类名的定义,可以帮助理解源码。

主要的类涉及AbstractApplicationContext、BeanDefinition、DefaultListableBeanFactory、ContextLoaderListener、DispatcherServlet和ServletHandler等。

最后我写了测试类分别测试了在tomcat中启动,浏览器访问myspring项目情况,下图是启动图。

下图是在main方法中测试图

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值