时间:2021-05-19
首先我们初始化一个最简单的容器,用这个容器研究初始化的流程。
下面就是一个再简单不过的IoC容器了,该容器包含了一个名为beanA的bean,我们初始化容器后,取出该Bean,并调用方法。
public class BeanA { private String testStr = "Test"; public BeanA(){ System.out.println("Running A"); } public void sayHello(){ System.out.println("I'm beanA."); }}<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://.jirath.learn.spring.BeanA"> </bean></beans>@Testvoid testHello(){ Resource springResource=new ClassPathResource("spring-beans.xml"); BeanFactory beanFactory=new XmlBeanFactory(springResource); BeanA beanA= (BeanA) beanFactory.getBean("beanA"); beanA.sayHello();}虽然XmlBeanFactory已经被Spring标记为过时,但是为了达到我们从一个xml定义的bean信息构造一个BeanFactory的目的,勉为其难,还是先用一下233。
这段代码很简单,但是反映了我们使用IoC的一个基础流程:
我们就先从这几点一点点讲
在开始之前,需要意识到的是:Spring作为一款优秀的面向对象的框架设计,Spring中采用了大量的设计模式并按照面向对象的逻辑对各个类进行设计,做到了各个类功能单一。
这意味着,Spring的代码会有一种剥洋葱的感觉,子类对双亲扩展,调用默认实现。
构建数据源的部分难度不大,会稍微简单点讲
这里推荐一本书:《Spring源码深度解析(第2版)》
看了Spring的设计,这是真的面向对象。
Spring一开始是使用大量的xml文件配置了容器。从面向对象的角度思考,为了方便使用,需要将各种资源都被抽象出来,先看一下他的资源类结构体系。该部分是系统最底层,在core包中
InputStreamSource封装能返回InputStream的类,可以返回这个流。
日常开发用Spring的体系也会很便捷。
Resource体系达到了这样的目的:对于不同的文件来源都有一种实现来读取该文件,同时,拥有一个规范的接口。
现在我们有了Resource的设计,为了读取对象,Spring提供了BeanDefinitionReader、ResourceLoader来从资源中提取出我们需要的资源内容。这些类的关系如下:
这就是大致的一个逻辑,把握住这个大致的逻辑看源码,体验要上升不少
下面是最上方的例子启动的大致的流程,大量的代码在处理读取资源的逻辑
这里就是初始化的结果了
到此这篇关于一个简单的Spring容器初始化流程的文章就介绍到这了,更多相关Spring容器初始化流程内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
BeanPostProcessor的接口定义,可以实现提供自己的实例化逻辑,依赖解析逻辑等,也可以以后在Spring容器实例化完毕,配置和初始化一个bean通过
关于在spring容器初始化bean和销毁前所做的操作定义方式有三种:第一种:通过注解@PostConstruct和@PreDestroy方法实现初始化和销毁b
MyBatis初始化过程就是生成一些必须的对象放到Spring容器中。问题是这个过程到底生成了哪些对象?当遇到MyBatis初始化失败时,如何正确的找到分析问题
BeanPostProcessor接口作用:如果我们想在Spring容器中完成bean实例化、配置以及其他初始化方法前后要添加一些自己逻辑处理。我们需要定义一个
stack是一个比较简单的容器,它的使用也很简单,stack是LIFO容器,就是后进先出,最后添加进去的元素,第一个取出来stack初始化std::stackf