手写Spring第二篇,实现一个超级无敌爆炸简单的Spring工厂

88 阅读3分钟

今天开始我要手写一个Spring,就是这么膨胀。小小Spring,拿下!注意是小小Spring哈,不是Spring本体,毕竟本体连看懂都难,就别说能充分理解然后手写出来。

本次手写Spring全程参考 第01章:开篇介绍,我要带你撸 Spring 啦! | 小傅哥 bugstack 虫洞栈 你要说我能不能不抄别人,那指定是不能的,虽然很想自己从现有的 Spring 中把核心部分抽离出来,毕竟自己动比较爽。总之千言万语汇成一句话:实力不允许啊。

image.png

不过呢?我会在学习的过程中,将自己的思考全盘记录下来,相信你不管是菜鸡还是大神都能受用。因为本菜鸡写出来的东西,一般菜鸡还是能看懂的。如果看不懂就证明你比我更加菜,哈哈哈哈。

image.png

废话不多说,直接开搞。标题写的啥来着?不是我跑题,我是试你来着。搞一个超级简单的Spring容器,整高端点应该叫 BeanFactoryFactory 这个单词我认识--工厂,那 Bean 是啥?我翻译了一下,他说是豆子。这么一推理,BeanFactor 那指定是生产豆子的豆子工厂,一点毛病没有。

BeanFactory 的设计就出来了

public class BeanFactory {  
    Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>();  
    // 要什么豆子先来这里登记
    public void register(String name, BeanDefinition beanDefinition) {  
        beanDefinitionMap.put(name, beanDefinition);  
    }
    // 拿豆子
    public BeanDefinition getBean(String name) {  
        return beanDefinitionMap.get(name);  
    }  
}

BeanDefinition 就是豆子的特征值,比如你买豆子的时候就会跟老板说,要一个绿豆,饱满一点的,再不济你那一个给他看,然后说来一个和这个一样的豆子。

public class BeanDefinition {  
    private final Object bean;  
  
    public BeanDefinition(Object bean) {  
        this.bean = bean;  
    }  
    public Object getBean(){  
        return this.bean;  
    }  
}

那领豆子的流程是怎么样的?

public class BeanFactoryTest {  
    @Test  
    public void test() {  
        // 1.我先把工厂搞起来
        BeanFactory beanFactory = new BeanFactory();  
  
        // 2.你准备好要什么豆子  
        Bean bean = new Bean();  
        BeanDefinition beanDefinition = new BeanDefinition(bean);  
  
        // 3.登记豆子信息  
        beanFactory.register("beanName", beanDefinition);  
  
        // 4.取豆子  
        BeanDefinition bd = beanFactory.getBean("beanName");  
  
        // 5.用豆子  
        Bean b = (Bean) bd.getBean();  
        b.test();  
    }  
}

public class Bean {  
    public Bean() {  
    }  
    public void test() {  
        System.out.println("我是一颗绿豆子");  
    }  
}

我发现你小子来过我工厂之后,怎么其他人都不来了?原来是你小子来过我工厂之后,回去和大家说你拿来做登记的样品被我收了,然后取豆子的时候就是这个样品。

既然自己都有豆子了还去工厂干嘛?还耽误时间跑去工厂,这工厂迟早倒闭。确实我家工厂还没布置生产线,只能大家先带过来。下次我布置好生产线就不用带样品了。

而且你小子不识货啊,我家工厂有特殊技术,如果有其他人想要和你样品一样的豆子,都可以来取。我从吗喽那里求来一种仙术,名叫指针。

image.png

如果其他人也来工厂拿你拿过的豆子,我可以拿一个豆子指针给她,这个豆子指针和原来的豆子一模一样,没有区别。你们可以有一个一模一样的豆子,你把豆子切了两半,她也看到豆子变成两半了。就是这么神奇,真的不要试试吗?

虽然现在的工厂用起来还有点...呃简陋,不过相信我,生产线马上就好了。

能不能用另说,你就说是不是最简单的吧?我工厂连生产都不用,简单这个事情是不是拿捏得死死的?

总之不管三七二十一,我们先给他实现了。实践是检验真理的唯一标准,先做起来其他的慢慢就懂了。