a.创建一个独立的maven项目
b.引入对应依赖
- <parent>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-parentartifactId>
- <version>2.1.15.RELEASEversion>
- <relativePath/>
- parent>
-
- <dependencies>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-webartifactId>
- dependency>
- dependencies>
c. 添加对应的启动器
- @SpringBootApplication
- public class GpSpringBootApplication {
-
- public static void main(String[] args) {
- SpringApplication.run(GpSpringBootApplication.class,args);
- }
- }
d.启动启动器的主方法即可
- @SpringBootApplication
- public class GpSpringbootDemo02Application {
-
- public static void main(String[] args) {
- // Spring IoC 容器的初始化
- ApplicationContext ac = SpringApplication.run(GpSpringbootDemo02Application.class, args);
- }
- }
main方法: 其实完成的就是一个SpringIOC容器的初始化操作
@SpringBootApplication注解
- @Target({ElementType.TYPE}) // 注解可以写在哪些地方
- @Retention(RetentionPolicy.RUNTIME) // 该注解的作用域 RESOURCES CLASS RUNTIME
- @Documented // 该注解会被API抽取
- @Inherited // 可继承
- // 以上四个是Java中提供的元注解
- @SpringBootConfiguration // 本质上就是一个Configuration注解
- @EnableAutoConfiguration // 自动装配的注解
- @ComponentScan( // 扫描 会自动扫描 @SpringBootApplication所在的类的同级包(com.gupaoedu)以及子包中的Bean,所有一般我们建议将入口类放置在 groupId+artifcatID的组合包下
- excludeFilters = {@Filter(
- type = FilterType.CUSTOM,
- classes = {TypeExcludeFilter.class}
- ), @Filter(
- type = FilterType.CUSTOM,
- classes = {AutoConfigurationExcludeFilter.class}
- )}
- )
在Spring Boot中给我们提供的有两个配置文件 applicationContext.properties,applicationContext.yml作用是一样的,一个项目中只需要其中的一个就可以了。
自定义属性
# 自定义的配置信息
user.username=bobo
user.age=18
user.address=湖南长沙
获取
- @Value("${user.username}")
- private String userName;
-
- @Value("${user.age}")
- private Integer age;
- @Value("${user.address}")
- private String address;
Spring Boot内置的有Logback的依赖
直接在属性文件中简单配置
- # logback的配置
- logging.file=d:/log.log
- logging.level.org.springframework.web=DEBUG
或者单独提供一个logback.xml
命名规则 application-xxx.properties
spring.profiles.active=xxx # 指定对应的环境
SpringBootmore的存放静态资源的目录
在resources统计目录下创建一个webapp目录,该目录的类型必须是ResourcesRoot
自定义目录后,创建对应的相关资源,然后在属性文件中去覆盖静态资源的路径配置即可
- # 表示所有的访问都经过静态资源路径
- spring.webflux.static-path-pattern=/**
-
- # 覆盖默认的配置,所有需要将默认的static public等这些路径将不能作为静态资源的访问
- spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/custom
@EnableAutoConfiguration
- @Target({ElementType.TYPE})
- @Retention(RetentionPolicy.RUNTIME)
- @Documented
- @Inherited
- @AutoConfigurationPackage
- @Import({AutoConfigurationImportSelector.class})
- public @interface EnableAutoConfiguration {
- String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
-
- Class>[] exclude() default {};
-
- String[] excludeName() default {};
- }
通过@EableAutoConfiguration注解发现。其本身就是一个组合注解,有一个注解我们必须要先弄清除@Import注解,可参考博客Spring之IOC-CSDN博客
- public String[] selectImports(AnnotationMetadata annotationMetadata) {
- if (!this.isEnabled(annotationMetadata)) {
- return NO_IMPORTS;
- } else {
- // 加载META-INF/spring-autoconfigure-metadata.properties
- AutoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader.loadMetadata(this.beanClassLoader);
- AutoConfigurationImportSelector.AutoConfigurationEntry autoConfigurationEntry = this.getAutoConfigurationEntry(autoConfigurationMetadata, annotationMetadata);
- // 返回需要IoC加载的类型数组
- return StringUtils.toStringArray(autoConfigurationEntry.getConfigurations());
- }
- }
- protected AutoConfigurationImportSelector.AutoConfigurationEntry getAutoConfigurationEntry(AutoConfigurationMetadata autoConfigurationMetadata, AnnotationMetadata annotationMetadata) {
- if (!this.isEnabled(annotationMetadata)) {
- return EMPTY_ENTRY;
- } else {
- AnnotationAttributes attributes = this.getAttributes(annotationMetadata);
- // 获取候选的配置信息 META-INF/spring.factories 加载了很多的 类路径
- List
configurations = this.getCandidateConfigurations(annotationMetadata, attributes); - // 去掉重复的
- configurations = this.removeDuplicates(configurations);
- // 去掉要排除掉的类型
- Set
exclusions = this.getExclusions(annotationMetadata, attributes); - this.checkExcludedClasses(configurations, exclusions);
- configurations.removeAll(exclusions);
- // 过滤器
- configurations = this.filter(configurations, autoConfigurationMetadata);
- // 广播
- this.fireAutoConfigurationImportEvents(configurations, exclusions);
- return new AutoConfigurationImportSelector.AutoConfigurationEntry(configurations, exclusions);
- }
- }
其启动的流程:
1.在SpringBoot项目启动的时候,会加载SpringBootApplication这个注解
2.会解析@EnableAutoConfiguration注解
3.与之对应的解析@Import注解
4.执行ImportSelector接口的的实现
5.加载META-INF/spring-autoconfigure-metadata.properties中的注解元数据信息
6.加载META-INF/spring.factories各种类路径【第三方扩展也同样的会加载对应的文件 SPI扩展机制】