上篇文章对spring做了个初步认识,本篇文章对于IOC容器的加载过程,是从一个整体角度出发,比较宏观的介绍整个加载流程,细节方面待下节再讲。先看过程图

IOC容器的加载过程图

spring容器中怎么使用velocity spring容器的加载方式_注解方式


图片可能有点不清晰,没关系,有这么个画面就好,其实IOC容器整个加载过程大致分为两部分:

第一部分是将我们的类注册至bean定义容器中,第二部分bean工厂拿到bean定义容器中的类根据bean定义进行生产。

整个过程呢,跟我们装修房子差不多。比方说,装修房子吧,第一步,装修公司需要做好一些准备工作,第二步,派销售人员去扫楼,寻找客户,找到意向客户之后,第三步,安排设计师进行设计图纸,第四步,由专业的装修团队根据图纸进行装修房子。

脑海里有了这个流程,好,那我们开始真正分析了:

加载ioc容器的方式有很多种,如xml、注解、配置类等,我们就以注解方式为例(注解方式要比xml方式好):

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ConfigTest.class); 这样就创建了一个ApplicationContext的spring容器。那我们的IOC容器到底是怎么去加载这个配置类的呢?

第一步,做好准备工作:

实例化一个bean工厂,然后初始化bean定义读取器,并且在我们容器中注册了一些必需的处理器。

第二步,寻找客户

注册我们的配置类。

第三步,设计图纸

调用bean工厂后置处理器(invokeBeanFactoryPostProcessors),读取配置类、进行扫描、解析、注册为bean定义(提供扩展点操作bean定义beanPostProcessor),放入bean定义容器中。

第四步:装修

bean工厂根据bean定义生产bean。

接下来,咱们说说装修过程,即bean的生命周期
1.实例化;
2.填充属性;
3.如果bean实现了BeanNameAware接口,Spring将bean的ID传递给setBeanName()方法;
4.如果bean实现了BeanFactoryAware接口,Spring将调用setBeanFactory()方 法,将BeanFactory容器实例传入;
5.如果bean实现了ApplicationContextAware接口,Spring将调用 setApplicationContext()方法,将bean所在的应用上下文的引用传入进来;
6.如果bean实现了BeanPostProcessor接口,Spring将调用它们的postProcessBeforeInitialization()方法;
7.如果bean实现了InitializingBean接口,Spring将调用它们的afterPropertiesSet()方法,如果bean使用initmethod声明了初始化方法, 该方法也会被调用;
8.如果bean实现了BeanPostProcessor接口,Spring将调用它们的postProcessAfterInitialization()方法;
到这一步,bean已经生产好了,它们将一直驻留在应用上 下文中,直到该应用上下文被销毁;
9.如果bean实现了DisposableBean接口,Spring将调用它的destroy()接口方法。同样,如果bean使用destroy-method声明了销毁方法,该方法也会被调用。
好了,ioc容器的加载过程分析到此就告一段落了,下节我们将进入源码层面,进行微观分析。