首页 > 作文

手把手带你实现一个萌芽版的Spring容器

更新时间:2023-04-06 01:06:24 阅读: 评论:0

从什么是ioc开始?

2岁宝宝教育spring——春天,java编程世界的春天是由一位音乐家——rod johnson带来的。

rod johnson先后编写了两本巨著《expert one-on-one j2ee design and development》、《expert one-on-one j2ee development without ejb》,拉起了挑战正统java ee框架ejb的大旗。

rod johnson不仅是一名旗手,更是开发了spring这一轻量级框架,像一名勇敢的龙骑兵一样,对ejb发动了冲锋,并最终战胜了ejb,让spring成为java ee事实上的标准。

spring的两大内核分别是ioc和aop,其中最最核心的是ioc。

所谓的ioc(控制反转):就是由容器来负责控制对象的生命周期和对象间的关系。以前是我们想要什么,就自己创建什么,现在是我们需要什么,容器就给我们送来什么。

也就是说,控制对象生命周期的不再是引用它的对象,而是容器。对具体对象,以前是它控制其它对象,现在所有对象都被容器控制,所以这就叫控制反转。

也许你还听到另外一个概念di(依赖注入),它指的是容器在实例化对象的时候把它依赖的类注入给它,我们也可以认为,di是ioc的补充和实现。

工厂和spring容器

s折服的意思pring是一个成熟的框架,为了满足扩展性、实现各种功能,所以它的实现如同枝节交错的大树一样,现在让我们把视线从spring本身移开,来看看一个萌芽版的spring容器怎么实现。

spring的ioc本质就是一个大工厂,我们想想一个工厂是怎么运行的呢?

生产产品:一个工厂最核心的功能刘德华天意歌词就是生产产品。在spring里,不用bean自己来实例化,而是交给spring,应该怎么实现呢?——答案毫无疑问,反射。

那么这个厂子的生产管理是怎么做的?你应该也知道——工厂模式。

库存产品:工厂一般都是有库房的,用来库存产品,毕竟生产的产品不能立马就拉走。spring我们都知道是一个容器,这个容器里存的就是对象,不能每次来取对象,都得现场来反射创建对象,得把创建出的对象存起来。

订单处理:还有最重要的一点,工厂根据什么来提供产品呢?订单。这些订单可能五花八门,有线上签签的、有到工厂签的、还有工厂销售上门签的……最后经过处理,指导工厂的出货。

在spring里,也有这样的订单,它就是我们bean的定义和依赖关系,可以是xml形式,也可以是我们最熟悉的注解形式。

那对应我们的萌芽版的spring容器是什么样的呢?

订单:bean定义

bean可以通过一个配置文件定义,我们会把它解析成一个类型。

beans.properties

为了偷懒,这里直接用了最方便解析的properties,用一个<key,value>类型的配置来代表bean的定义,其中key是beanname,value是class

urdao:cn.fighter3.bean.urdao

beandefinition.java

bean定义类,配置文件中bean定义对应的实体

获取订单:资源加载

接下订单之后,就要由销售向生产部门交接,让生产部门知道商品的规格、数量之类。

资源加载器,就是来完成这个工作的,由它来完成配置文件中配置的加载。

订单分配:bean注册

对象注册器,这里用于单例bean的缓存,我们大幅简化,默认所有bean都是单例的。可以看到所谓单例注册,也很简单,不过是往hashmap里存对象。

生产车间:对象工厂

好了,到了我们最关键的生产部门了,在工厂里,生产产品的是车间,在ioc容器里,生产对象的是beanfactory。

对象工厂,我们最核心的一个类,在它初始化的时候,创建了bean注册器,完成了资源的加载。

获取bean的时候,先从单例缓存中取,如果没有取到,就创建并注册一个bean

生产销售:测试

urdao.java

我们的bean类,很简单

单元测试

运行结果

a good man.
a good man.

至此,我贺知章是什么朝代的诗人们一个萌芽版的spring容器就完成了。

考虑一下,它有哪些不足呢?是否还可以抽象、扩展、解耦……

细细想想这些东西,你是不是对真正的spring ioc容器为何如此复杂,有所理解了呢?

参考:

[1].《spring揭秘》

[2].小傅哥 《手撸spring》

[3].《精通spring4.x企业应用开发实战》

到此这篇关于手把手带你实现一个萌芽版的spring容器的文章就介绍到这了,更多相关java spring容器内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.海之梦com!

本文发布于:2023-04-06 01:06:23,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/7b11800c4057a95d885def41df92a650.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:手把手带你实现一个萌芽版的Spring容器.doc

本文 PDF 下载地址:手把手带你实现一个萌芽版的Spring容器.pdf

标签:对象   容器   工厂   订单
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图