Spring启动过程(6大启动流程图解)

Spring启动过程(6大启动流程图解)-mikechen

Spring启动过程是Java面试经常被考的问题,下面我就来详解6大Spring启动过程@mikechen

Spring启动过程(6大启动流程图解)-mikechen

1.加载

在这个阶段,Spring会扫描应用程序上下文中的所有类和配置文件,并通过Java的反射机制来加载它们。

Spring支持多种类型的Spring配置文件,包括XML文件、JavaConfig文件、注解等。

通常情况下,Spring会扫描classpath下的所有类和配置文件,然后将它们加载到内存中。

比如:通过ClassPathXmlApplicationContext来加载XML配置文件中的Bean:

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

 

2.实例化

在加载完成之后,Spring会将所有Bean实例化,并将它们放入Bean容器中,这个容器会负责管理这些Bean的生命周期和依赖关系。

在实例化过程中,Spring会使用Java的反射机制来创建Bean的实例,并自动注入它们所需要的依赖关系。

这些依赖关系可以通过构造函数注入、Setter方法注入、字段注入等方式来实现。

如下所示:

<bean id="userService" class="com.example.UserService">
    <constructor-arg ref="userDao" />
</bean>

<bean id="userDao" class="com.example.UserDao" />

定义一个名为”userService”的Bean,并通过构造函数注入一个名为”userDao”的依赖。

 

3.配置

在这个阶段,Spring会对所有的Bean进行配置,这包括设置属性、调用初始化方法等。

Spring提供了多种方式来配置Bean,包括XML配置、JavaConfig配置、注解等,其中,XML配置是最常用的方式之一。

 

4.初始化

在配置完成之后,Spring会调用所有Bean的初始化方法,这些方法可以在Bean的定义中通过init-method属性来指定。

如下所示:

public class UserService {
    private void init() {
        // do initialization
    }
}

<bean id="userService" class="com.example.UserService" init-method="init">
    <constructor-arg ref="userDao" />
    <property name="logger" ref="logger" />
</bean>

在初始化方法中,Bean可以完成一些必要的初始化操作,例如:打开数据库连接、加载资源文件等。

 

5.后置处理

在这个阶段,Spring会对所有Bean进行后置处理,这包括:添加拦截器、代理等。

后置处理可以在Bean的定义中通过BeanPostProcessor接口来实现,通过实现这个接口,可以在Bean初始化前后进行一些额外的处理。

如下所示:

public class CustomBeanPostProcessor implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        // do something before initialization
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        // do something after initialization
        return bean;
    }
}

<bean id="customBeanPostProcessor" class="com.example.CustomBeanPostProcessor" />

Spring配置文件中定义一个实现BeanPostProcessor接口的类,并将其注册到Bean容器中。

 

6.就绪

在所有的初始化和后置处理都完成之后,Spring就可以将应用程序上下文视为已就绪,可以接受请求了。

UserService userService = context.getBean("userService", UserService.class);
userService.doSomething();

以上就是Spring启动过程详解,更多Spring内容请查看:Spring教程(史上最全图文详解)

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法