《手撸Spring》学习笔记-1

241 阅读2分钟

6fdeffd3e4a84e577d9480f632ca32d5.jpeg

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情

Spring源码学习,自己动手写一个Spring

一、前言

在某位同事的催促下,开始了第一次的更文挑战,我真的不是为了奖品啊!(PS:我就是相中了奖品),小心我告你诽谤(huibang)!!!

欢迎大佬们来到内卷的时代,爱因斯坦说过,成功需要百分之一的灵感加上百分之九十九的汗水。我所关注的博主之一小付哥就是卷王的代表,每周更文不断,高产似母猪。刚晓得小付哥是因为工作中需要使用netty,从19年一直到现在,跟着他学到了很多东西,在此次更文挑战中,正好把小付哥的《手撸Spring》再学习一遍。

好的,下面让我们开始吧。

二、正文

只要是Java开发程序员都绕不开Spring这个框架,Spring的翻译是春天,Java程序员的春天,极大的简化了开发。

Spring是一个开放源代码的设计层面框架,它是于2003 年兴起的一个轻量级的Java 开发框架。由Rod Johnson创建,其前身为Interface21框架,后改为了Spring并且正式发布。Spring是为了解决企业应用开发的复杂性而创建的。它解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。

  1. 创建一个Bean定义的类。用于定义Bean的实例化信息,我们暂时先使用Object存放一个对象。具体代码如下:

    public class BeanDefinition {
    ​
        private Object bean;
    ​
        public BeanDefinition(Object bean) {
            this.bean = bean;
        }
    ​
        public Object getBean() {
            return bean;
        }
    }
    
  2. 我们创建一个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);
        }
    }
    
  3. 这样一个简单的Bean容器就定义好了,我们实现了对Bean的存放、获取以及注册。

第一次写技术类的文章,做的不好的地方请大家指教(baoliuyijian)。谢谢大家的阅读,预知后事如何,且听下回分解。