Spring Boot pom文件详解
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文件详解相关推荐
- Spring Boot 集成 FreeMarker 详解案例
年轻就不应该让自己过得太舒服" – From yong 一.Springboot 那些事 SpringBoot 很方便的集成 FreeMarker ,DAO 数据库操作层依旧用的是 Myba ...
- SpringBoot2.1.5(16)--- Spring Boot的日志详解
SpringBoot2.1.5(16)--- Spring Boot的日志详解 市面上有许多的日志框架,比如 JUL( java.util.logging), JCL( Apache Commons ...
- Maven中pom文件详解
在IDE中使用Maven IDE工具 MyEclipse 集成maven插件 Eclipse Eclipse For Java EE IDEA 集成Maven插件 在IDE中 配置Maven 指定 ...
- docker添加新的环境变量_Docker的安装及部署Spring Boot项目操作详解!
本文使用Docker部署Spring Boot项目.部署之前需要环境中已经安装Docker和Maven(用于打包),所以本文先进行安装Docker和Maven:接着搭建一个Spring Boot项目, ...
- Spring Boot (4)---配置文件详解
Spring2.0 Boot配置文件详解 配置文件说明 Spring Boot 配置文件允许为同一套应用,为不同的环境用不同的配置文件.比如开发环境.测试环境.生成环境.你可以用 properties ...
- Spring Boot(3)---Spring Boot启动器Starter详解
Spring Boot的启动器Starter详解 Spring Boot 简化了 Spring 应用开发,不需要配置就能运行 Spring 应用, Spring Boot 管理 Spring 容器.第 ...
- 企业分布式微服务云SpringCloud SpringBoot mybatis (二)Spring Boot属性配置文件详解...
相信很多人选择Spring Boot主要是考虑到它既能兼顾Spring的强大功能,还能实现快速开发的便捷.我们在Spring Boot使用过程中,最直观的感受就是没有了原来自己整合Spring应用时繁 ...
- Spring Boot属性配置文件详解
相信很多人选择Spring Boot主要是考虑到它既能兼顾Spring的强大功能,还能实现快速开发的便捷.我们在Spring Boot使用过程中,最直观的感受就是没有了原来自己整合Spring应用时繁 ...
- (拿来主义-8) Spring Boot属性配置文件详解(三)
相信很多人选择Spring Boot主要是考虑到它既能兼顾Spring的强大功能,还能实现快速开发的便捷.我们在Spring Boot使用过程中,最直观的感受就是没有了原来自己整合Spring应用时繁 ...
- maven(二)pom文件详解
文章目录 1. 什么是pom 文件? 2. pom文件各常用属性含义 2.1 项目基本信息 2.2 build项目构建属性介绍 2.2.1 resources资源路径列表 2.2.2 plugins ...
最新文章
- 李沐团队半年离开六人,MxNet是否英雄落幕?贾扬清:关键能否解决新痛点
- 使用genext2fs制作ramdisk
- html布局overflow,overflow的中文意思
- V210 UART 整体流程
- linux桌面发展方向,观点|Linux 桌面的发展之路!
- bat执行exe程序_dos命令start教程,并行运行exe程序或者启动bat批处理cmd脚本
- android小细节
- 疯狂的折叠屏!不买折叠手机的5个理由
- 腾讯云区块链产品负责人邵兵:产业区块链刚刚起步,做好基础设施才有可能进入2.0阶段
- 拿签证威胁外籍博士后,实验室导师真的可以为所欲为?
- 在Windows XP/2000下拒强行关机
- 版本 tomcat_Tomcat爆出安全漏洞!Spring Cloud/Boot框架多个版本受影响
- (4329)Ping pong
- Proteus仿真STM32F103R6输出PWM波
- VirtualLab初学者教程-2.搭建一个光学系统
- ProxyDHCP service did not reply to request on port 4011
- 基于RT1052 Aworks 测试PXP图像混合功能(十三)
- 学习笔记-echarts自定义背景图片
- 微信小程序-传统开发模式实现授权注册登录流程【超详细,附源码】
- CheckListBox的实现方式分析