1. 什么是自动装配 ?
自动装配,说白了就是指在应用程序启动时,不需要通过配置的方式,就可以将程序中需要依赖的类或者组件,自动加载起来.
【例子 1】
比如说在传统的 Spring 中,你可能需要手动去配置数据库连接池的 bean,并且设置一些参数,才能正常的连接数据库,而 SpringBoot 中的自动装配,我们只需要设置一些关键信息,像 jdbc 协议,数据库的用户名和密码,以及驱动即可。
【例子 2】
再比如,我想要在项目中使用 Jackson 提供的 ObjectMapper 这个类,在 Spring 中,我需要两步操作:
- 在 pom.xml 中添加 jackson 的依赖;
- 在配置文件中,配置 jackson 的 bean,给它添加一个标识;
然后才可以通过 DI 注入到当前对象中。
而 SpringBoot 中,这两步操作可以直接省去,直接 DI 注入即可。为啥 ? 我没有在任何地方添加依赖,也没有去存储相应的 bean,为什么可以直接注入进来? 因为 SpringBoot 在启动的时候,就把这些类给加载起来了,这就是自动装配。
类似的类还有:RedisTemplate,JdbcTemplate,RestTemplate 等等。
2. Spring Boot 自动装配的流程 ?
1. 启动应用程序:Spring Boot 会自动扫描启动类路径下的各种依赖和组件。
2. 自动扫描类路径下的清单:这个清单是在 META-INF 路径下的 spring.factories 文件,这个文件中就定义了各种自动配置类的类名,例如:数据库 datasource 相关的,Jackson 相关的等等。
3. 条件化装配:扫描了自动配置类之后,SpringBoot 会根据条件判断(@conditionor 注解)是否需要进行装配。比如说是否存在某个特定的类,某个属性值是否设置了 true 啊,如果满足条件,那么就自动装配。
4. 自动配置创建 Bean:根据上面两点的条件满足,SpringBoot 创建相应的 Bean。
5. 覆盖默认配置:在自动配置完成之后,可以手动在配置文件中配置相应的属性来覆盖默认的配置。允许根据业务需求定制。
6. 启动应用程序上下文:装配完成之后,SpringBoot 就会启动应用上下文,这时候所有的自动配置和手动配置的 Bean 都会被加载到上下文中。
7. 应用程序运行:应用程序上下文准备好了之后,程序会正常运行,这时候我们就可以通过注入 Bean 来使用自动装配提供的功能了。