如果我们需要在SpringBoot应用中整合一种新的开发场景,只需在pom.xml引入对应的starter即可
一个starter不仅包含依赖,还包含相应的配置,starter中包含的配置都是通过Java类实现的——Java配置方式
Spring版本迭代及配置方式发展
-
Spring 1.x : 所有的bean的配置只能通过xml完成
-
Spring 2.x : 基于JDK1.5对注解的支持,Spring 2.x开始支持注解
企业开发中到底是用xml配置还是用注解?
对基础配置、引用的第三方依赖中的配置使用xml完成:例如数据源配置
业务开发使用注解:例如controller、service -
Spring 3.x : 开始提供基于Java的配置方式
-
Spring 4.x : xml、注解、Java配置
1.xml配置
<!--applicationContext.xml-->
<bean id="stu" class="com.qfedu.beans.Student"></bean>
<bean id="date" class="java.util.Date"></bean>
2.注解配置
@Component
public class Student{
//用于自定义类的配置
}
3.Java配置方式(创建配置类)
@Configuration
public class SpringConfig{
//将自定义类或第三方类交给Spring容器管理
//常用于第三方类配置 java.util.Date
@Bean
public Date getDate(){
return new Date();
}
}
4.SpringBoot自动配置
- 一个SpringBoot应用,会通过添加第三方依赖和配置类(java配置方式)来完成需求的整合,也就是说通过在pom.xml添加starter第三方依赖及在application.yml等添加第三方配置信息,完成第三方组件的引入。
- SpringBoot应用启动,SpringBoot提供启动类xxxApplication,类中只添加了@SpringBootApplication注解和调用了SpringApplication.run方法。
- @SpringBootApplication注解里又可以发现包含了3个其他注解,主要的3个分别是:
@SpringBootConfiguration:继承了@Configuration注解,表示启动类也可以作为一个配置类使用
@EnableAutoConfiguration:启动SpringBoot内置的自动配置功能
@ComponentScan:扫描bean,扫描范围为当前应用启动类所在的包 - SpringApplication.run方法,往底层点,嵌套了几层run方法后,最终会调用getSpringFactoriesInstances方法,getSpringFactoriesInstances方法内部实现了对loadFactoryNames方法的调用,loadFactoryNames内部又调用了loadSpringFactories,loadSpringFactories内部又调用了classLoader.getResources(“META-INF/spring.factories”)
调用一大堆,最终无非是扫描了所有依赖中的META-INF目录中spring.factories文件(starter依赖中通常都会存在这个文件)
META-INF/spring.factories,SpringBoot内置的自动配置类路径,包含当前第三方环境的自动配置类路径
spring.factories,spring-boot基础依赖包含这个文件、其他的第三方starter也包含这个文件 - 获取所有自动配置类的路径,当获取到所有自动配置类路径之后,就会依次扫描并加载这些自动配置,然后依次判断是否满足自动配置类的初始化条件,如果不满足则跳过,如果满足则进行初始化
5.全局配置文件
SpringBoot针对不同的开发场景提供默认的属性配置,如果默认的配置不能满足开发的需要,我们需要对属性配置进行修改
-
SpringBoot应用提供了一个全局配置文件
application.properties
用于进行自定义配置 -
全局配置文件支持2中语法配置(*.properties /*.yaml):
-
properties 键值对配置
# 配置数据源 (key必须按照SpringBoot的要求) spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/db_2010_mybatis?characterEncoding=utf-8 spring.datasource.username=root spring.datasource.password=admin123 # 配置映射文件路径及实体类的包名 mybatis.mapper-locations=classpath:mappers/*Mapper.xml mybatis.type-aliases-package=com.qfedu.springboot.demo.entity
-
yaml 语法的配置
spring: datasource: url: jdbc:mysql://localhost:3306/db_2010_mybatis?characterEncoding=utf-8 driver-class-name: com.mysql.jdbc.Driver username: root password: admin123 mybatis: mapper-locations: classpath:mappers/*Mapper.xml type-aliases-package: com.qfedu.springboot.demo.entity server: port: 9999 servlet: context-path: /demo1
-