spring源码之Ioc容器加载过程详解

本文详细探讨了Spring Ioc容器的加载过程,包括基于注解或XML配置的类扫描及BeanDefinition注册,以及Bean的创建步骤。重点讲述了ConfigurationClassPostProcessor在扫描配置类和BeanDefinition注册中的作用,以及BeanFactoryPostProcessor和BeanPostProcessor作为Spring扩展点的应用。此外,还介绍了Bean的实例化、属性填充和初始化阶段的关键操作。
摘要由CSDN通过智能技术生成

一、前言

针对于spring源码的初步学习,首先应该掌握四大块,基于四大块全部掌握的基础上在进行扩展深入研究学习,具体四块如下:

1.Ioc容器加载的过程

2.spring解决循环依赖方式

3.spring Aop的实现

4.spring 事务管理实现

如果掌握了上面的四点,那么基本上就可以很自豪的说精通spring了,也算掌握了spring大概一半的内容了。

本文主要研究Ioc容器的加载过程。

二、什么是Ioc容器?

我们常说Ioc是一个容器,是的,ioc就是一个容器,并且它并不神秘,说白了,spring就是用一个ConcurrentHashMap来作为Ioc容器的,key就是beanName,value就是Bean的实例对象,所以Ioc容器就是这么简单易懂。

虽然我们都知道它就是一个简单的Map,但是spring如何创建这个Map,且往这个Map里面存值? 下面一起学习。

所谓的Ioc容器的加载过程,我能否换句话说,就是向一个Map中存值的过程?

这个过程也很简单,简单到就四步:

1.找到要存的数据

2.处理要存的数据

3.创建要存的数据的值

4.把值存到容器map中

转化为spring的逻辑描述:

1.基于注解或者xml配扫描配置的类

2.注册为BeanDefinition到BeanDefinitionMap中

3.BeanFactory基于BeanDefinition创建Bean

4.把Bean存入Ioc容器

这就是Ioc的加载过程,但是.....光知道这些可还不够,我们还需是需要了解一下具体加载的细节,方便我们在开发spring应用时,能灵活使用并且能够基于Spring做一些扩展,毕竟spring提供的那么多扩展点,可以不是闹着玩的。

三、Ioc的加载过程

上面已经大致了解了Ioc加载的四大步,现在对这四步一一展开分析:

首先假设我们有一个配置类:

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@EnableTransactionManagement
@EnableAspectJAutoProxy //底层是@Import注解
@ComponentScan(basePackages = {"com.zb.study"})
public class Config {

}

然后有一个Service

@Service
public class CarServiceImpl implements CarService {

	public CarServiceImpl() {
		System.out.println("这是CarServiceImpl的构造方法");
	}
}

 然后我们通过spring的ApplicationContext获取CarServiceImpl的实例对象

import com.zb.study.service.CarService;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;


public class TestMain {

	public static void main(String[] args) {
        //把主配置类传进去
		AnnotationConfigApplicationContext configApplicationContext = new AnnotationConfigApplicationContext(Config.class);
		String[] beanDefin
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值