SpringBoot启动机制(starter机制)核⼼原理详解
⼀、前⾔
使⽤过springboot的同学应该已经知道,springboot通过默认配置了很多框架的使⽤⽅式帮我们⼤⼤简化了项⽬初始搭建以及开发过程。本⽂的⽬的就是⼀步步分析springboot的启动过程,这次主要是分析springboot特性⾃动装配。
那么⾸先带领⼤家回顾⼀下以往我们的web项⽬是如何搭建的,通常我们要搭建⼀个基于Spring的Web应⽤,我们需要做以下⼀些⼯作:pom⽂件中引⼊相关jar包,包括spring、springmvc、redis、mybaits、log4j、mysql-connector-java 等等相关jar …
配置l,Listener配置、Filter配置、Servlet配置、log4j配置、error配置 …properties在哪打开
配置数据库连接、配置spring事务
配置视图解析器
开启注解、⾃动扫描功能
配置完成后部署tomcat、启动调试
……
花在搭建⼀个初始项⽬,可能⼀个⼩时就过去了或者半天救过了,但是⽤了SpringBoot之后⼀切都会变得⾮常便捷,下⾯我们⾸先来分析⼀下SpringBoot的起步依赖以及⾃动配置。
⼆、起步依赖
1.在我们的pom⽂件⾥⾯引⼊以下jar:
spring-boot-starter-web包⾃动帮我们引⼊了web模块开发需要的相关jar包。
mybatis-spring-boot-starter帮我们引⼊了dao开发相关的jar包。
spring-boot-starter-xxx是官⽅提供的starter,xxx-spring-boot-starter是第三⽅提供的starter。
截图看⼀下我们的mybatis-spring-boot-starter
可以看出mybatis-spring-boot-starter并没有任何源码,只有⼀个pom⽂件,它的作⽤就是帮我们引⼊其它jar。
2.配置数据源
stater机制帮我们完成了项⽬起步所需要的的相关jar包。那问题⼜来了,传统的spring应⽤中不是要在l中配置很多bean的吗,⽐如dataSource的配置,transactionManager的配置 … springboot是如何帮我们完成这些bean的配置的?
下⾯我们来分析这个过程
三、⾃动配置
1.基于java代码的bean配置
以mybatis为例,在上⾯的截图中,我们发现mybatis-spring-boot-starter这个包帮我们引⼊了mybatis-spring-boot-autoconfigure这个包,如下图:
⾥⾯有MybatisAutoConfiguration这个类,打开这个类看看有些什么东西。
熟悉@Configuration&、@Bean这两个bean的同学或许已经知道了。这两个注解⼀起使⽤就可以创建⼀个基于java代码的配置类,可以⽤来替代相应的xml配置⽂件。
@Configuration注解的类可以看作是能⽣产让Spring IoC容器管理的Bean实例的⼯⼚。@Bean注解告诉Spring,⼀个带有@Bean的注解⽅法将返回⼀个对象,该对象应该被注册到spring容器中。
所以上⾯的MybatisAutoConfiguration这个类,⾃动帮我们⽣成了SqlSessionFactory这些Mybatis的重要实例并交给spring容器管理,从⽽完成bean的⾃动注册。
2.⾃动配置条件依赖
从MybatisAutoConfiguration这个类中使⽤的注解可以看出,要完成⾃动配置是有依赖条件的。
⾸先预习⼀下Springboot是常⽤的条件依赖注解有:
@ConditionalOnBean,仅在当前上下⽂中存在某个bean时,才会实例化这个Bean。
@ConditionalOnClass,某个class位于类路径上,才会实例化这个Bean。
@ConditionalOnExpression,当表达式为true的时候,才会实例化这个Bean。
@ConditionalOnMissingBean,仅在当前上下⽂中不存在某个bean时,才会实例化这个Bean。
@ConditionalOnMissingClass,某个class在类路径上不存在的时候,才会实例化这个Bean。
@ConditionalOnNotWebApplication,不是web应⽤时才会实例化这个Bean。
@AutoConfigureAfter,在某个bean完成⾃动配置后实例化这个bean。
@AutoConfigureBefore,在某个bean完成⾃动配置前实例化这个bean。
所以要完成Mybatis的⾃动配置,需要在类路径中存在SqlSessionFactory.class、SqlSessionFactoryBean.class这两个类,需要存在DataSource这个bean且这个bean完成⾃动注册。
进⼊DataSourceAutoConfiguration这个类,可以看到这个类属于这个包:
org.springframework.boot.autoconfigure.jdbc
这个包⼜属于spring-boot-autoconfigure-2.0.4.RELEASE.jar这个包,⾃动配置这个包帮们引⼊了jdbc、kafka、logging、mail、mongo等包。很多包需要我们引⼊相应jar后⾃动配置才⽣效。
3.Bean参数的获取
到此我们已经知道了bean的配置过程,但是还没有看到springboot是如何读取yml或者properites配置⽂件的的属性来创建数据源的?
在DataSourceAutoConfiguration类⾥⾯,我们注意到使⽤了EnableConfigurationProperties这个注解。
DataSourceProperties中封装了数据源的各个属性,且使⽤了注解ConfigurationProperties指定了配置⽂件的前缀。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。