一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情。
Spring源码学习,自己动手写一个Spring
一、前言
在某位同事的催促下,开始了第一次的更文挑战,我真的不是为了奖品啊!(PS:我就是相中了奖品),小心我告你诽谤(huibang)!!!
欢迎大佬们来到内卷的时代,爱因斯坦说过,成功需要百分之一的灵感加上百分之九十九的汗水。我所关注的博主之一小付哥就是卷王的代表,每周更文不断,高产似母猪。刚晓得小付哥是因为工作中需要使用netty,从19年一直到现在,跟着他学到了很多东西,在此次更文挑战中,正好把小付哥的《手撸Spring》再学习一遍。
好的,下面让我们开始吧。
二、正文
只要是Java开发程序员都绕不开Spring这个框架,Spring的翻译是春天,Java程序员的春天,极大的简化了开发。
Spring是一个开放源代码的设计层面框架,它是于2003 年兴起的一个轻量级的Java 开发框架。由Rod Johnson创建,其前身为Interface21框架,后改为了Spring并且正式发布。Spring是为了解决企业应用开发的复杂性而创建的。它解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。
-
创建一个Bean定义的类。用于定义Bean的实例化信息,我们暂时先使用Object存放一个对象。具体代码如下:
public class BeanDefinition { private Object bean; public BeanDefinition(Object bean) { this.bean = bean; } public Object getBean() { return bean; } } -
我们创建一个Bean对象工厂,实现Bean的存储、获取和注册。我们使用Map对Bean进行存储,获取Bean对象就是从map中获取已经注册的Bean对象,注册就是把定义好的Bean放入map中。
public class BeanFactory { //存放bean 定义对象的容器 private Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>(); /** * 根据bean名称获取bean对象 * * @param name * @return */ public Object getBean(String name) { return this.beanDefinitionMap.get(name).getBean(); } /** * 将bean 的定义注册到容器中 * * @param name * @param beanDefinition */ public void registerBeanDefinition(String name, BeanDefinition beanDefinition) { this.beanDefinitionMap.put(name, beanDefinition); } } -
这样一个简单的Bean容器就定义好了,我们实现了对Bean的存放、获取以及注册。
第一次写技术类的文章,做的不好的地方请大家指教(baoliuyijian)。谢谢大家的阅读,预知后事如何,且听下回分解。