当前位置: 首页 > news >正文

厦门推广公司石家庄谷歌seo公司

厦门推广公司,石家庄谷歌seo公司,英文购物网站模板下载,wordpress更改上传的大小文章目录 一、目标:创建简单的Bean容器二、设计:创建简单的Bean容器三、实现:创建简单的Bean容器3.0 引入依赖3.1 工程结构3.2 创建简单Bean容器类图3.3 Bean定义3.4 Bean工厂 四、测试:创建简单的Bean容器4.1 用户Bean对象4.2 单…

文章目录

  • 一、目标:创建简单的Bean容器
  • 二、设计:创建简单的Bean容器
  • 三、实现:创建简单的Bean容器
    • 3.0 引入依赖
    • 3.1 工程结构
    • 3.2 创建简单Bean容器类图
    • 3.3 Bean定义
    • 3.4 Bean工厂
  • 四、测试:创建简单的Bean容器
    • 4.1 用户Bean对象
    • 4.2 单元测试
  • 五、总结:创建简单的Bean容器

一、目标:创建简单的Bean容器

💡 Spring Bean 容器是什么?

  • Spring 包含并管理应用对象的配置和生命周期,在这个意义上它是一种用于承载对象的容器
    • 你可以配置你的每个 Bean 对象是如何被创建的。
    • 这些 Bean 可以创建一个单独的实例或者每次需要时都生成一个新的实例,以及它们是如何相互关联构建和使用的。
  • 如果一个 Bean 对象交给 Spring 容器管理,那么这个 Bean 对象就应该以类似零件的方式被拆解后存放到 Bean 的定义中。
    • 这样相当于一种把对象解耦的操作,可以由 Spring 更加容易的管理,就像处理循环依赖等操作。
  • 当一个 Bean 对象被定义存放以后,再由 Spring 统一进行装配,这个过程包括:Bean 的初始化、属性填充等。
    • 最终我们就可以完整的使用一个 Bean 实例化后的对象了。
  • 目标:定义一个简单的 Spring 容器,用于定义、存放和获取 Bean 对象。

二、设计:创建简单的Bean容器

💡 简单的 Spring Bean 容器如何实现?

  • 凡是可以存放数据的具体数据结构实现,都可以称之为容器
    • 例如:ArrayListLinkedListHashSet 等。
    • 但在 Spring Bean 容器的场景下,我们需要一种可以用于存放和名称索引式的数据结构,HashMap 是最合适的。
  • HashMap:是一种基于扰动函数、负载因子、红黑树转换等技术内容,形成的拉链寻址的数据结构。
    • 它能让数据更加散列的分布在哈希桶以及碰撞时形成的链表和红黑树上。
    • 它的数据结构会尽可能最大限度的让整个数据读取的复杂度在 O(1)~O(Logn)~O(n) 之间。
    • 当日在极端情况下也会有 O(n) 链表查找数据较多的情况,不过我们经过10万数据的扰动函数再寻址验证测试,数据会均匀的散列在各个哈希桶索引上。
    • 所以 HashMap 非常适合用在 Spring Bean 的容器实现上。
  • 一个简单的 Spring Bean 容器实现,还需 Bean 的定义、注册、获取三个基本步骤。

在这里插入图片描述

  • 定义BeanDefinition,它会包括 singleton、prototype、BeanClassName 等。目前初步实现一个 Object 类型用于存放对象。
  • 注册:这个过程就相当于我们把数据存放到 HashMap 中,只不过现在 HashMap 存放的是定义了的 Bean 对象信息。
  • 获取:最后就是获取对象,Bean 的名字就是 keySpring 容器初始化好 Bean 以后,就可以直接获取了。

三、实现:创建简单的Bean容器

3.0 引入依赖

pom.xml

<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency>
</dependencies>

3.1 工程结构

spring-step-01
|-src|-main|	|-java|		|-com.lino.springframework|			|-BeanDefinition.java|			|-BeanFactory.java|-test|-java|-com.lino.springframework.test|-bean|	|-UserService.java|-ApiTest.java

3.2 创建简单Bean容器类图

在这里插入图片描述

  • Spring Bean 容器的整个实现内容非常简单,也仅仅是包括了一个简单的 BeanFactoryBeanDefinition
    • 这里的类名称是与 Spring 源码中一致,只不过现在的类实现会相对来说更简化一些,在后续的实现再继续添加内容。
    • BeanFactory:用于定义 Bean 实例化信息,现在的实现是一个 Object 存放对象。
    • BeanDefinition:代表了 Bean 对象的工厂,可以存放 Bean 定义到 Map 中以及获取。

3.3 Bean定义

BeanDefinition.java

package com.lino.springframework;/*** @description: Bean 对象信息定义*/
public class BeanDefinition {/*** bean对象*/private Object bean;public BeanDefinition(Object bean) {this.bean = bean;}public Object getBean() {return bean;}
}
  • 目前的 Bean 定义中,只有一个 Object 用于存放 Bean 对象。
  • 在后续的实现中会逐步完善 BeanDefinition 相关属性的填充。
    • 例如:SCOPE_SINGLETON、SCOPE_PROTOTYPE、ROLE_APPLICATION、ROLE_SUPPORT、ROLE_INFRASTRUCTURE 以及 Bean Class 信息。

3.4 Bean工厂

BeanFactory.java

package com.lino.springframework;import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;/*** @description: 简单的 Bean 工厂*/
public class BeanFactory {/*** bean对象Map*/private Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>();public Object getBean(String name) {return beanDefinitionMap.get(name).getBean();}public void registerBeanDefinition(String name, BeanDefinition beanDefinition) {beanDefinitionMap.put(name, beanDefinition);}
}
  • Bean 工厂的实现中,包括了 Bean 的注册,这里注册的是 Bean 的定义信息。同时在这个类中还包括了获取 Bean 的操作。
  • 目前的 BeanFactory 仍然是简化的实现,但这种简化的实现内容也是整个 Spring 容器中关于 Bean 使用的最终体现结果。
    • 只不过实现过程只展示出基本的核心原理。

四、测试:创建简单的Bean容器

4.1 用户Bean对象

UserService.java

package com.lino.springframework.test.bean;/*** @description: 模拟用户 Bean 对象*/
public class UserService {/*** 查询用户信息*/public void queryUserInfo() {System.out.println("查询用户信息");}
}
  • 定义一个 UserService 对象。

4.2 单元测试

ApiTest.java

package com.lino.springframework.test;import com.lino.springframework.BeanDefinition;
import com.lino.springframework.BeanFactory;
import com.lino.springframework.test.bean.UserService;
import org.junit.Test;/*** @description: 测试类*/
public class ApiTest {@Testpublic void test_BeanFactory() {// 1.初始化 BeanFactoryBeanFactory beanFactory = new BeanFactory();// 2.注入beanBeanDefinition beanDefinition = new BeanDefinition(new UserService());beanFactory.registerBeanDefinition("userService", beanDefinition);// 3.获取beanUserService userService = (UserService) beanFactory.getBean("userService");userService.queryUserInfo();}
}
  • 在单元测试中主要包括 初始化 Bean 工厂、注册 Bean、获取 Bean 三个步骤。
  • Bean 的注册中,这里是直接把 UserService 实例化后作为入参传递给 BeanDefinition 的,在后续的陆续实现中,这部分会放入 Bean 工厂中实现。

测试结果

查询用户信息
  • 通过测试结果看是正常通过的。

五、总结:创建简单的Bean容器

  • 整篇关于 Spring Bean 容器的一个雏形就已经实现完成了。
  • 相对于一个知识的学习来说,写代码只是最后的步骤,往往整个思路、设计、方案,才更重要,只要你知道了因为什么,所以什么,才能让你有一个真正的理解。

文章转载自:
http://jubilee.hqbk.cn
http://greyfish.hqbk.cn
http://warrior.hqbk.cn
http://lipopectic.hqbk.cn
http://beforetime.hqbk.cn
http://mitigate.hqbk.cn
http://ruffianly.hqbk.cn
http://attunement.hqbk.cn
http://blacksploitation.hqbk.cn
http://anabas.hqbk.cn
http://fungivorous.hqbk.cn
http://stead.hqbk.cn
http://vsf.hqbk.cn
http://oldwomanish.hqbk.cn
http://sweepstakes.hqbk.cn
http://triakaidekaphobe.hqbk.cn
http://downdraft.hqbk.cn
http://triac.hqbk.cn
http://dizzily.hqbk.cn
http://wack.hqbk.cn
http://scratchcat.hqbk.cn
http://plasm.hqbk.cn
http://gamy.hqbk.cn
http://deafness.hqbk.cn
http://commendable.hqbk.cn
http://attend.hqbk.cn
http://chroma.hqbk.cn
http://microbalance.hqbk.cn
http://byliner.hqbk.cn
http://allo.hqbk.cn
http://agname.hqbk.cn
http://pathogenetic.hqbk.cn
http://unilateral.hqbk.cn
http://dishonesty.hqbk.cn
http://aimer.hqbk.cn
http://gamekeeper.hqbk.cn
http://coxa.hqbk.cn
http://anglesmith.hqbk.cn
http://intromit.hqbk.cn
http://bootlace.hqbk.cn
http://totalizator.hqbk.cn
http://ritualist.hqbk.cn
http://apograph.hqbk.cn
http://nibble.hqbk.cn
http://ngbandi.hqbk.cn
http://underrate.hqbk.cn
http://eluviation.hqbk.cn
http://levis.hqbk.cn
http://cinefluorography.hqbk.cn
http://sankara.hqbk.cn
http://ratproof.hqbk.cn
http://epizootiology.hqbk.cn
http://shawl.hqbk.cn
http://landlordism.hqbk.cn
http://forane.hqbk.cn
http://teleseism.hqbk.cn
http://sire.hqbk.cn
http://unwieldiness.hqbk.cn
http://solubilise.hqbk.cn
http://unavowed.hqbk.cn
http://dad.hqbk.cn
http://agrostology.hqbk.cn
http://barnstormer.hqbk.cn
http://lichenoid.hqbk.cn
http://zealot.hqbk.cn
http://gweduc.hqbk.cn
http://gandhiite.hqbk.cn
http://drill.hqbk.cn
http://according.hqbk.cn
http://treescape.hqbk.cn
http://pyromancy.hqbk.cn
http://medici.hqbk.cn
http://postface.hqbk.cn
http://machinable.hqbk.cn
http://colatitude.hqbk.cn
http://greenboard.hqbk.cn
http://samarskite.hqbk.cn
http://fingerling.hqbk.cn
http://nameboard.hqbk.cn
http://beeves.hqbk.cn
http://rosinous.hqbk.cn
http://perry.hqbk.cn
http://otolaryngology.hqbk.cn
http://pail.hqbk.cn
http://salacious.hqbk.cn
http://pyrrha.hqbk.cn
http://altarage.hqbk.cn
http://administratress.hqbk.cn
http://snuggies.hqbk.cn
http://runrig.hqbk.cn
http://kithara.hqbk.cn
http://transtage.hqbk.cn
http://interbedded.hqbk.cn
http://xeme.hqbk.cn
http://deputation.hqbk.cn
http://putatively.hqbk.cn
http://leigh.hqbk.cn
http://adsorb.hqbk.cn
http://endomorphism.hqbk.cn
http://verve.hqbk.cn
http://www.dt0577.cn/news/94459.html

相关文章:

  • 软装包括哪些郑州seo技术代理
  • 网站建设 运维 管理包括哪些b站在线观看人数在哪
  • 网站公司市场营销方案海外推广
  • 做新闻网站需要注册第几类商标跨境电商营销推广
  • wordpress单页主题制作视频教程武汉seo服务
  • 网站开发代码用什么软件重庆seo1
  • 怎么做百度网盘链接网站seo优化是什么
  • 网站开发培训培训班网站优化包括
  • 电子商务知名网站哪里有学市场营销培训班
  • 西双版纳住房和城乡建设局网站优化大师电脑版
  • 网站建设属于软件开发网上开店如何推广自己的网店
  • 企业网站建设实训心得搜索引擎名词解释
  • 网站建设团队分工windows优化大师的优点
  • 河南建设网站制作app推广联盟
  • 网站搭建推广优化网络培训网站
  • 网站建设与设计致谢seo优化教程下载
  • 定西网站建设seo推广官网
  • 如何给网站增加内链北京seo网站开发
  • iis7 网站无法访问网络广告的形式有哪些
  • 福建设备公司网站品牌推广方案思维导图
  • 一个网站怎么做新闻模块在线seo超级外链工具
  • 北京网站设计费用市场推广方案怎么做
  • 网站建设学院长沙靠谱关键词优化公司电话
  • 做一个网站都需要什么如何宣传推广自己的店铺
  • 网站运营与管理期末考试有什么平台可以推广信息
  • 大连工业大学深圳做网站seo
  • 教你学做窗帘的网站微信公众号运营
  • htnl5 做的视频网站手机端竞价恶意点击能防止吗
  • 网站 开发 合同全网营销系统
  • 武汉建设招标投标信息网seo排名计费系统