pom文件说明

1、父项目依赖:

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.9.RELEASE</version>
</parent>

点进去我们发现spring-boot-starter-parent依赖的父项目:

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>1.5.9.RELEASE</version><relativePath>../../spring-boot-dependencies</relativePath>
</parent>

他才是真正来管理spring boot应用里的所有依赖版本,可以称为Spring boot的版本仲裁中心,以后我们导入依赖默认是不需要写版本的,没有在dependencies中管理的依赖我们依然要声明版本号。
2、场景启动器starter
我们拿web来说,在pom中导入依赖:

<!-- web 依赖-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

spring-boot-starter-web点进去发现,已经帮我们导入了web mvc tomcat等所需要的依赖

spring-boot-starter : springboot场景启动器,帮我们导入场景所需的依赖。
其他场景例如:spring-boot-starter-redis、spring-boot-starter-batch等
springboot将所有功能场景都抽取出来,做成一个个的starter(启动器),只需要在项目中引入这些starter,就可以将相关场景的依赖导入进来。

主程序注解说明

我们看下主程序:

package com.learn;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class HelloWordMainApplication {public static void main(String[] args) {SpringApplication.run(HelloWordMainApplication.class,args);}
}

@SpringBootApplication springboot应用标注在某个类上说明是主配置类,运行这个类的main方法来启动springboot应用。
我们点进去看下:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {@Filter(type = FilterType.CUSTOM,classes = {TypeExcludeFilter.class}), @Filter(ype = FilterType.CUSTOM,classes = {AutoConfigurationExcludeFilter.class})})
public @interface SpringBootApplication {

是个组合注解:
1、@SpringBootConfiguration :springboot的配置类
点进去发现也是个组合注解:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {}

@Configuration spring的注解,标注在配置类上,配置类也是容器中的一个组件@Component
2、@EnableAutoConfiguration :开启自动配置功能
springboot可以帮我们自动配置所需的配置,加上这个注解,是告诉springboot使配置生效。
点进去可以看到:

@AutoConfigurationPackage
@Import({EnableAutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {

@AutoConfigurationPackage :自动配置包
点进去可以看到:

@Import({Registrar.class})
public @interface AutoConfigurationPackage {}

@Import spring底层注解,给容器导入一个组件,具体哪些组件,由Registrar.class这个类指定
看下底层代码:

public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {AutoConfigurationPackages.register(registry, (new AutoConfigurationPackages.PackageImport(metadata)).getPackageName());
}

我们在这里打个断点,调试下:

我们可以总结出:@AutoConfigurationPackage 注解就是将主配置类(@SpringBootApplication标注的类)所在包及下边所有子包里边的所有组件扫描到spring容器中。

@Import({EnableAutoConfigurationImportSelector.class}) :给容器中导入组件
我们找到EnableAutoConfigurationImportSelector类的父类:
打个断点调试下:

可以看到,EnableAutoConfigurationImportSelector作用是将所有需要导入的组件以全类名的方式返回,@Import会给容器中导入非常多的自动配置类(xxxAutoConfiguration).

自动配置类是从哪里获取到的呢?

我们看下源码:

List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);
List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
Enumeration<URL> urls = classLoader != null ? classLoader.getResources("META-INF/spring.factories") : ClassLoader.getSystemResources("META-INF/spring.factories");

我们可以看到是在类路径下的 META-INF/spring.factories 中获取EnableAutoConfiguration的值

我们以webmvc的配置类为例,点进去看下:

可以看到,这些配置是不可以缺少的,只不过我们之前需要自动写的配置,springboot已经帮我们写好了。

Spring Boot pom文件详解相关推荐

  1. Spring Boot 集成 FreeMarker 详解案例

    年轻就不应该让自己过得太舒服" – From yong 一.Springboot 那些事 SpringBoot 很方便的集成 FreeMarker ,DAO 数据库操作层依旧用的是 Myba ...

  2. SpringBoot2.1.5(16)--- Spring Boot的日志详解

    SpringBoot2.1.5(16)--- Spring Boot的日志详解 市面上有许多的日志框架,比如 JUL( java.util.logging), JCL( Apache Commons ...

  3. Maven中pom文件详解

    在IDE中使用Maven IDE工具 MyEclipse 集成maven插件 Eclipse ​ Eclipse For Java EE IDEA 集成Maven插件 在IDE中 配置Maven 指定 ...

  4. docker添加新的环境变量_Docker的安装及部署Spring Boot项目操作详解!

    本文使用Docker部署Spring Boot项目.部署之前需要环境中已经安装Docker和Maven(用于打包),所以本文先进行安装Docker和Maven:接着搭建一个Spring Boot项目, ...

  5. Spring Boot (4)---配置文件详解

    Spring2.0 Boot配置文件详解 配置文件说明 Spring Boot 配置文件允许为同一套应用,为不同的环境用不同的配置文件.比如开发环境.测试环境.生成环境.你可以用 properties ...

  6. Spring Boot(3)---Spring Boot启动器Starter详解

    Spring Boot的启动器Starter详解 Spring Boot 简化了 Spring 应用开发,不需要配置就能运行 Spring 应用, Spring Boot 管理 Spring 容器.第 ...

  7. 企业分布式微服务云SpringCloud SpringBoot mybatis (二)Spring Boot属性配置文件详解...

    相信很多人选择Spring Boot主要是考虑到它既能兼顾Spring的强大功能,还能实现快速开发的便捷.我们在Spring Boot使用过程中,最直观的感受就是没有了原来自己整合Spring应用时繁 ...

  8. Spring Boot属性配置文件详解

    相信很多人选择Spring Boot主要是考虑到它既能兼顾Spring的强大功能,还能实现快速开发的便捷.我们在Spring Boot使用过程中,最直观的感受就是没有了原来自己整合Spring应用时繁 ...

  9. (拿来主义-8) Spring Boot属性配置文件详解(三)

    相信很多人选择Spring Boot主要是考虑到它既能兼顾Spring的强大功能,还能实现快速开发的便捷.我们在Spring Boot使用过程中,最直观的感受就是没有了原来自己整合Spring应用时繁 ...

  10. maven(二)pom文件详解

    文章目录 1. 什么是pom 文件? 2. pom文件各常用属性含义 2.1 项目基本信息 2.2 build项目构建属性介绍 2.2.1 resources资源路径列表 2.2.2 plugins ...

最新文章

  1. 李沐团队半年离开六人,MxNet是否英雄落幕?贾扬清:关键能否解决新痛点
  2. 使用genext2fs制作ramdisk
  3. html布局overflow,overflow的中文意思
  4. V210 UART 整体流程
  5. linux桌面发展方向,观点|Linux 桌面的发展之路!
  6. bat执行exe程序_dos命令start教程,并行运行exe程序或者启动bat批处理cmd脚本
  7. android小细节
  8. 疯狂的折叠屏!不买折叠手机的5个理由
  9. 腾讯云区块链产品负责人邵兵:产业区块链刚刚起步,做好基础设施才有可能进入2.0阶段
  10. 拿签证威胁外籍博士后,实验室导师真的可以为所欲为?
  11. 在Windows XP/2000下拒强行关机
  12. 版本 tomcat_Tomcat爆出安全漏洞!Spring Cloud/Boot框架多个版本受影响
  13. (4329)Ping pong
  14. Proteus仿真STM32F103R6输出PWM波
  15. VirtualLab初学者教程-2.搭建一个光学系统
  16. ProxyDHCP service did not reply to request on port 4011
  17. 基于RT1052 Aworks 测试PXP图像混合功能(十三)
  18. 学习笔记-echarts自定义背景图片
  19. 微信小程序-传统开发模式实现授权注册登录流程【超详细,附源码】
  20. CheckListBox的实现方式分析

热门文章

  1. 进销存excel_Excel教程:教大家做简单的进销存
  2. steam服务器102修复,分享steam错误代码102的解决方法
  3. XShell免费版(解决官网打不开的问题)
  4. 【超详细】随机变量及其分布——《概率论与数理统计》第二章学习笔记
  5. android屏幕有残影,如何预防手机烧屏 防止手机屏幕出现残影教程分享
  6. vs2010操作excel 需要安装office2010
  7. c语言写一个五子棋小游戏
  8. emu8086的入门使用
  9. JavaEE下宠物领养网站的设计与实现
  10. idea格式化代码小技巧