springboot运⾏机制
前⾔
使⽤过springboot的同学应该已经知道,springboot通过默认配置了很多框架的使⽤⽅式帮我们⼤⼤简化了项⽬初始搭建以及开发过程。本⽂的⽬的就是⼀步步分析springboot的启动过程,分析springboot是如何帮我们简化这个过程的。
springboot帮我们做了什么
通常搭建⼀个基于spring的web应⽤,我们需要做以下⼯作:
1、pom⽂件中引⼊相关jar包,包括spring、springmvc、redis、mybaits、log4j、mysql-connector-java 等等相关jar …
2、配置l,Listener配置、Filter配置、Servlet配置、log4j配置、error配置 …
3、配置数据库连接、配置spring事务
4、配置视图解析器
5、开启注解、⾃动扫描功能
6、配置完成后部署tomcat、启动调试
…
搭个初始项⽬不⼀会就⼀个⼩时甚⾄半天过去了。⽽⽤springboot后,⼀切都变得很简便快速。下来我们来⼀步步分析springboot的起步依赖与⾃动配置这两个核⼼原理。
起步依赖
在springboot中我们只需要引⼊下⾯简单的⼏步就可以完成⼀个ssm后台项⽬的初始搭建。
1、引⼊jar
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath/><!-- lookup parent from repository -->
</parent>
<!--mybatis 开发包-->
<dependency>
<groupId&batis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!--springboot web模块⽀持-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--druid 的数据源-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.31</version>
</dependency>
spring-boot-starter-web包⾃动帮我们引⼊了web模块开发需要的相关jar包,
可以看出在这个mybatis-spring-boot-starter 中,并没有任何源码,只有⼀个pom⽂件,它的作⽤就是帮我们引⼊了相关jar包。
熟悉@Configuration&、@Bean这两个bean的同学或许已经知道了。这两个注解⼀起使⽤就可以创建⼀个基于java代码的配置类,可以⽤来替代相应的xml配置⽂件。
所以上⾯的MybatisAutoConfiguration这个类,⾃动帮我们⽣成了SqlSessionFactory这些Mybatis的重要实例并交给spring容器管理,从⽽完成bean的⾃动注册。
⾃动配置条件依赖
从MybatisAutoConfiguration这个类中使⽤的注解可以看出,要完成⾃动配置是有依赖条件的。
@Configuration
@ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})
@ConditionalOnBean({DataSource.class})
@EnableConfigurationProperties({MybatisProperties.class})
@AutoConfigureAfter({DataSourceAutoConfiguration.class})
public class MybatisAutoConfiguration {
//....
}
这些是springboot特有的,常见的条件依赖注解有:
@ConditionalOnBean,仅在当前上下⽂中存在某个bean时,才会实例化这个Bean。
@ConditionalOnClass,某个class位于类路径上,才会实例化这个Bean。
@ConditionalOnExpression,当表达式为true的时候,才会实例化这个Bean。
@ConditionalOnMissingBean,仅在当前上下⽂中不存在某个bean时,才会实例化这个Bean。
@ConditionalOnMissingClass,某个class在类路径上不存在的时候,才会实例化这个Bean。
@ConditionalOnNotWebApplication,不是web应⽤时才会实例化这个Bean。
@AutoConfigureAfter,在某个bean完成⾃动配置后实例化这个bean。
mysql的jar包下载@AutoConfigureBefore,在某个bean完成⾃动配置前实例化这个bean。
所以要完成Mybatis的⾃动配置,需要在类路径中存在SqlSessionFactory.class、SqlSessionFactoryBean.class这两个类,需要存在DataSource这个bean且这个bean完成⾃动注册。
进⼊DataSourceAutoConfiguration这个类,可以看到这个类属于这个包:
org.springframework.boot.autoconfigure.jdbc
bean参数获取
到此我们已经知道了bean的配置过程,但是还没有看到springboot是如何读取yml或者properites配置⽂件的的属性来创建数据源的?
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论