Spring容器的启动过程,Bean的生命周期

一、Spring是什么?

Spring是框架,也是生态,生态什么意思,它提供了一系列的衍生产品,比如SpringBoot,SpringCloud。要搞懂这些,必须要了解的一个就是“扩展性”,所以我们在看源码的时候,会看到很多空的方法实现,很多类,接口层次接口关系特别复杂。

Spring包含重要的两个东西,一个是IOC,一个是AOP。在了解AOP之前,我们先要理解IOC。

什么是IOC?IOC叫控制反转,什么叫控制反转?原来我们需要一个对象的时候,需要自己来new,但是现在呢,我们交给Spring容器去创建,当我们需要的时候,从容器里去拿。同时,这里面有个东西叫DI,依赖注入,很多人认为IOC和DI是一个东西,其实这么说也没毛病,但是要区分出两个东西的区别,IOC指的是一种思想,DI指的是一种手段。

IOC容器,存放Bean,那么肯定有生产Bean。

二、Spring的使用概述

下图展示bean的一些属性。

<bean
id="唯一标识"
name="名称1"
class="全限定类名"
factory-bean="工厂实例beanname"
factory-method="createBean"
autowire="自动装配类型(byName,byType,constructo,autodetect,no)"
parent="继承beanName"
depends-on="前置beanName"
scope="作用域(singleton,prototype,request,session,globalSeesion)"
lazy-init="true/false">
</bean>

一般通过xml形式配置bean,以及Java代码中获取bean的方式如下

<beans> <bean id=? class=?> <property name=? value=? /> <property name=? ref=? /> </bean> <bean id=? class=?> <constructor-arg name=? value=? /> <constructor-arg name=? ref=? /> </bean> </beans>
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
XXX xxx = ac.getBean(XXX.class);
xxx.method();

这是最基本的一个使用方法,很简单,但是中间的处理环节到底是怎么做的,为什么写完一个配置文件,上面的代码中就能获取到我们想要的对象了?我们可以看出来通过ac可以获取到我们要的对象,所以ac里一定包含了一堆bean对象,这些bean对象哪来的,由此可以知道,一定是通过读取xml文件获取的。可以得到下面的流程图

容器用来放bean对象,Spring选择了什么集合来当容器,它选择了Map,有没有发现从容器中获取对象的时候,我们都传了一个参数,这个参数要么是一个Class对象,要么是一个Name,所以用Map来存储是最合适的。如果要你来设计这个Map的话,你觉得key是什么类型,value是什么类型。我觉得有两种方式:

1、key:String,value:Object

2、key:Class,value:Object

为什么呢,因为在进行自动装配的时候,有两种方式,一种是byName,一种是byType。但其实看过Spring源码的人都知道Spring有个三级缓存的东西,三个Map,不是上面两种方式这么简单,到时候我们再细讲。

三、了解Spring容器启动过程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天进步亿点点的小码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值