Spring官网学习(二)IOC和Bean的实例化

本章节主要是学习Spring官网的1.1、1.2和1.3节内容,有兴趣的同学可以跟着官网一起学习。

1、Spring容器和IOC
1.1、Spring容器是什么?

在官网1.2节中对Spring容器的描述如下:

The org.springframework.context.ApplicationContext interface represents the Spring IoC container and is responsible for instantiating, configuring, and assembling the beans.
这段话的意思主要是:
  • Spring容器是org.springframework.context.ApplicationContext接口的一个实例化对象
  • Spring容器主要负责实例化、配置和装配Spring的Bean对象。
1.2、Spring Bean是什么?

在官网中对Spring Bean描述如下:

A bean is an object that is instantiated, assembled, and otherwise managed by a Spring IoC container. Otherwise, a bean is simply one of many objects in your application
Spring Bean定义的大致意思如下:
  • Spring Bean必须是由Spring容器实例化、装配和以其他方式管理的对象。
  • 通俗的理解就是,JAVA对象经由Spring容器实例化、装配就可以变成一个Spring Bean,否则只能是一个普通的JAVA对象。
1.3、IOC是什么?

在官网1.1节中对IOC有详细的描述,大概意思如下:

IOC(控制反转)也称为依赖注入,IOC容器负责Spring Bean的创建、装配、生命周期的管理以及Bean与Bean之间的关系。在这整个过程当中,IOC容器完成了一个完整Bean的实例化,包括其依赖的Bean的实例化,那么这个依赖的Bean实例化是由IOC容器完成,而不是由开发人员去实例化的,这个过程就是IOC(控制反转)了,就是将依赖的的Bean的实例化的交由IOC容器管理和注入。
2、Spring容器如何实例化一个Bean

Spring官网给出了一个Spring容器工作图:
在这里插入图片描述
从上面的图片中可以看出,Spring容器通过POJO对象和配置的元数据信息可以产生一个充分配置的可以使用的系统。

这里所说的POJO对象就是JAVA对象,配置原数据信息就是开发人员自己配置的一些Bean的信息,比如Bean是单例还是原型?是按类型加载Bean还是按名称加载Bean等等…,目前可以用xml或者注解的方式配置元数据信息。

2.1、Bean的实例化

Spring官网提供了三种实例化Bean方式,分别如下:

  • 构造方法实例化Bean
  • 静态工厂方法实例化Bean
  • 实例工厂方法实例化Bean

俗话说,不是手撸的代码是得不到它的真传的,所以现在把官网所给的Demo撸一遍,跟着Spring源码看一看每一种Bean实例化过程的内在世界。

2.2、构造方法实例化Bean
2.2.1、Demo搭建

Demo结构如图所示:
在这里插入图片描述

  • TestInstantiationBean类的main方法内容如上图所示,这个类是入口。
  • MyServiceBean.xml的内容如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="myServiceBean" class="com.spring.spring.MyServiceBean"/>

</beans>
  • MyServiceBean类的内容如下:
public class MyServiceBean {
   
    public MyServiceBean() {
   
    }
}
2.2.2、源码分析

用Debug方式启动main方法,进入到getBean()方法,在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#createBeanInstance方法处打一个断点,跟着源码看一下构造方法实例化Bean的具体实现,该方法的具体内容如下,省略和这次分析无关的代码,只分析相关的代码:

/**
* 创建实例对象的函数
**/
protected BeanWrapper createBeanInstance(String beanName, RootBeanDefinition mbd, @Nullable Object[] args) {
   
		// 调用无参构造方法实例化对象
		
  • 18
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 21
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值