1.@SpringBootApplication 来标注一个主程序类,说明这是一个Spring Boot应用
@**SpringBootApplication**: Spring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就应该运行这个类的main方法来启动SpringBoot应用;
@SpringBootConfiguration 标注在某个类上,表示这是一个Spring Boot的配置类;
@EnableAutoConfiguration 开启自动配置功能
以前我们需要配置的东西,Spring Boot帮我们自动配置;@**EnableAutoConfiguration**告诉SpringBoot开启自动配置功能;这样自动配置才能生效;
@AutoConfigurationPackage 自动配置包
该注解的主要功能就是将@SpringBootAplication标注的类及下面所有子包里面的所有组件扫描到Spring容器
@Import(EnableAutoConfigurationImportSelector.class)
给容器中导入组件
EnableAutoConfigurationImportSelector:导入哪些组件的选择器
将所有需要导入的组件以全类名的方式返回:这些组件就会被添加到容器中;
会给需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中;
会给容器中导入非常多的自动配置类(xxxAutoConfiguration);就是给容器中导入这个场景需要的所有组件,并配置好这些组件;
SpringBoot在启动的时候从类路径下的MEAT-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作;以前我们需要张加配置的东西,自动
配置类都帮我们.
2.配置文件加载位置
SrpingBoot使用一个全局的配置文件,配置文件名是固定的;
application.properties
application.yml
@PropertySource{“classpath:”}:指定外部的配置文件
@ImportResource: 导入Spring的配置文件,让配置文件里面的内容生效(放在spring的朱配置类上面)
SpringBoot推荐给容器添加组件的方式:推荐使用全注解的方式
profile
1.多profile环境
我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml
默认使用application.properties的配置;
激活指定profile
在配置文件中指定 spring.profiles.active=dev
springboot开发之静态资源映射
通过/webjars/**请求静态资源
对于所有/webjars/**的请求,如果没有请求映射的处理方法(Controller)则当做静态资源请求处理,都去"classpath:/META-INF/resources/webjars/"中找资源:
即对于所有的请求,如果没有映射到处理方法,会当做静态资源请求来处理,回去下面的这几个路径下去查找静态资源:
静态资源文件夹:
"classpath:/META-INF/resources/":
"classpath:/resources/":
"classpath:/static/":
"classpath:/public/":
"/":
springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件(properties优先级高于yml)
–file:./config/ 当前项目的config目录
–file:./ 当前项目下
–classpath:/config/ 类路径下的config目录
–classpath:/ 类路径下
优先级由高到底,高优先级的配置会覆盖低优先级的配置;
SpringBoot会从这四个位置全部加载主配置文件;**互补配置**;
3.自动配置原理
1)、SpringBoot启动的时候加载主配置类,开启了自动配置功能 ==@SpringBootApplication ==
@EnableAutoConfiguration 作用
利用EnableAutoConfigurationImportSelector给容器中导入一些组件
查看selectImports()方法的内容
List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes);获取候选的配置
SpringFactoriesLoader.loadFactoryNames()
扫描所有jar包类路径下 META-INF/spring.factories
把扫描到的这些文件的内容包装成properties对象
从properties中获取到EnableAutoConfiguration.class类(类名)对应的值,然后把他们添加在容器中
springboot的精髓
SpringBoot启动会加载大量的自动配置类
我们看我们需要的功能有没有SpringBoot默认写好的自动配置类
我们再来看这个自动配置类中到底配置了哪些组件
给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们就可以在配置文件中指定这些属性的值
4.springboot的web开发
Thymeleaf的使用
默认的DEFAULT_PREFIX = "CLASSPATH:/templates"; 前缀
默认的DEFAULT_SUFFIX = ".html"; 后缀
Thymeleaf的语法规则
1.th:任意html属性;来替换原生属性的值
2.表达式
5.如何修改SpringBoot的默认配置
1.SpringBoot在自动配置很多组件的时候,先看容器中有没有用户自己配置的(@Bean,@Component)如果有就用用户配置的,如果没有,才自动配置;如果有些组件可以有多个(ViewResolver)将用户配置的和自己默认的组合起来
拓展SpringMVC
编写一个配置类(@Configuration),是WebMvcConfigurer类型;不能标注@EnableWebMvc
@ConditionalOnClass(某个class位于类路径上,才会实例化一个Bean)
只有当我们引入了相关的jar包,springboot才会将相应的对象加载到spring容器中去