【一起学Spring】第一节:5分钟实现一个简单的Bean容器

本文介绍了Spring框架的基本概念,包括其作为Java开发框架的核心特性——IoC容器和AOP。通过实例演示如何实现一个简单的Bean容器并进行单元测试,以帮助读者从零开始理解Spring的工作原理。
摘要由CSDN通过智能技术生成

引言

你工作这么多年,能用简单的一段话说清楚什么是Spring吗?

你可能想了想,回复了非常专业的话语:

Spring是一个开源的Java开发框架,它是为了解决企业级应用开发的复杂性而创建的。Spring框架的核心思想是通过把复杂的事情交给专门的工具去做,从而降低开发的难度。

它是基于Java的反射机制,通过反射机制,Spring框架可以将配置文件中的信息加载到内存中,并通过反射机制动态的创建对象,并将对象注入到容器中。

Spring框架的主要功能有:

IOC容器:Spring框架的核心,负责管理Bean的生命周期,并负责依赖注入。

AOP:Spring框架的另一个核心,通过AOP可以对业务逻辑进行隔离,从而降低业务逻辑的耦合性。

那我们这次【一次学Spring】专栏就是通过手写Spring的方式,让我们对Spring再次复习。在此之前,你可能只是背了八股文,或者在工作中,因为遇到了问题,通过Debug的方式熟悉了代码。但这样的方式,都是比较不成体系的学习,那这一次,我们就从0到1带你整体学习下Spring。

希望热爱学习的你,想深入学习的你,关注我。如果觉得通过此次学习,确实有不一样的收获,可以对此篇文章进行点赞,收藏。

在这里插入图片描述

目标

本小节,使用5分钟实现一个简单的Bean容器,并增加单元测试的方式验证我们的结果

准备

IDE:idea
JDK: 1.8
Maven: 3.9.5

实践

先看效果

使用tree命令查看项目目录及文件
因为我是Windows系统,使用命令如下:

tree /f

目录结构如下

│  pom.xml
│
└─src
    ├─main
    │  └─java
    │      └─cn
    │          └─itdebug
    │              └─spring
    │                  └─beans
    │                      │  BeansException.java
    │                      │
    │                      └─factory
    │                              BeanFactory.java
    │
    └─test
        └─java
            └─cn
                └─itdebug
                    └─spring
                        └─beans
                            └─factory
                                │  BeanFactoryTest.java
                                │
                                └─model
                                        User.java

代码实现

我们可以看到在本小节中,
一、我们在源码src目录下定义了2个类,分别是:

1、BeanFactory

源代码如下:

public class BeanFactory {

	private final Map<String, Object> signletonObjects = new HashMap<>();

	Object getBean(String name) throws BeansException {
		return signletonObjects.get(name);
	}

	public void registerSingleton(String name, Object bean) {
		signletonObjects.put(name, bean);
	}
}

BeanFactory顾名思义就是一个工厂,用来生产Bean。

Spring的IOC容器是通过BeanFactory来实现的,BeanFactory是Spring框架的核心接口,它负责生产Bean,管理Bean的生命周期,以及对Bean进行依赖注入。

在Spring源码中,它是一个接口(Interface)。在本小结中,为了更方便的演示,我们定义成了类(Class)。并且在该类中,我们定义了一个Bean容器,即HashMap。看到这里是不是恍然大悟,原来Bean容器就是一个HashMap啊。其实在Spring源码中就是这么实现的

2、BeansExcepetion

public class BeansException extends RuntimeException {

	private static final long serialVersionUID = 1L;

	public BeansException() {
		super();
	}

	public BeansException(String message) {
		super(message);
	}
}

单元测试验证

代码如下:

public class BeanFactoryTest extends TestCase {

	public void testBeanFactory() {

		/*
		 * 模拟Spring容器初始化
		 */
		BeanFactory beanFactory = new BeanFactory();
		User bean = new User("Eric", "上海市");
		beanFactory.registerSingleton("user", bean);
		Assert.assertEquals("Eric", ((User)beanFactory.getBean("user")).getName());
	}
}

代码中,我们是通过new关键字的方式来简单的演示我们的容器初始化,同时new User对象将对象注册到我们的容器中,并且通过单元测试的方式进行验证

验证结果

通过
在这里插入图片描述

代码源码见

项目源码 - learning-spring

流程图:
在这里插入图片描述

最后

内容分享需要坚持,如果你看到最后,对内容也觉得不错的话,给我点点👍,加关注。
本节分享就到这,下一节,我将继续基于本节内容进行进一步优化,按照Spring的方式去定义我们的Bean信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值