Spring Boot和maven项目管理
Spring Boot
- 配置文件优先级:命令行参数 > java系统属性 > properties > yml > yaml
- Bean管理:
- Spring项目启动时,会把bean创建好,放入IOC容器中【默认单例,饿汉模式】;
- 作用域:
- Singleton:容器类同名称的bean只有一个实例【默认】;
- prototype:每次使用创建新的实例;
- 通过@Scope("作用域"),来进行作用域配置;
- @Lazy:由饿汉模式改为懒汉模式;
- 第三方bean对象管理:
- 可以通过@Configuration注解声明配置类,在配置类中加入new方法,并注解:@Bean;
- 没有指定bean对象,这里默认是方法名;
- 如果第三方bean依赖其他bean对象注入,可以直接在方法的形参中定义,容器会根据类型自动装配【不需要注解注入了】;
- SpringBoot原理:
- 起步依赖:依赖的传递;
- 自动配置:bean对象的自动注入;
- 自动配置原理:
- 使用@ComponentScan包扫描;
- 使用@Import导入的类会被Spring加载到IOC容器中;
- 导入普通类
- 导入配置类;
- 导入ImportSelector接口实现类;
- ImportSelector接口内的方法返回的是:导入的全类名String数组;
- @EnableXxxx注解,封装Import注解【以上三种注入的方法的自动注入】;
- @SpringtBootApplication启动类的注解分析:
- @SpringtBootConfiguration:和@Configuration注解相同,声明为配置类;
- @ComponentScan:组件扫描,默认扫描当前引导类所在包及其子包;
- @EnableAutoConfiguration:SpringBoot实现自动配置的核心注解:封装了Import注解【全类名】;
- @Conditional条件装配【按照一定的条件进行判断】:
- @ConditionalONClass(name = "全类名"):判断环境中是否有对应的字节码文件,才注册bean到IOC容器【传递性声明】;
- @ConditionalOnMissingBean:判断环境中没有对应的bean【类型,value,或者名称,name】,才注册bean到IOC【默认声明】;
- @ConditionalOnProperty:判断配置文件中有对应属性,name 和值havingValue,才注册bean到IOC容器中【配置文件的属性和值的判断】;
- @Conditional条件装配【按照一定的条件进行判断】:
- 是自定义起步依赖:
- 自动配置功能:设置配置条件类【其他类的Spring注解不会被扫描】,将配置好的类的全类名进行保存在自动加载文件中【import文件】,
- 依赖管理:需要的第三方配置文件:xml
Maven管理:
-
分模块设计 + 通用组件;
-
继承与聚合:
-
依赖重复的解决【父工程,依赖的配置的统一管理】,eg:SpringBoot的父工程;
-
打包方式:
- jar:普通模块打包,内嵌tomcat运行【默认】;
- war:不同web程序打包,需要部署到外部的tomcat服务器中运行;
- pom:父工程或聚合工程,该模块不写代码,仅进行依赖管理【单继承】;
- 当父工程和子工程同时配置了一个依赖的不同版本,以子依赖的为准;
-
版本管理【版本锁定】:
-
针对不同模块的的不同依赖版本管理;
-
通过父工程的标签<dependencyManagement>来统一管理:
- 并不会引入依赖,
- 当子工程引入依赖的时候,无需执行<varsion>版本号,由父工程统一变更;
-
通过标签<dependencyManagement>的管理,仍然要单个寻找依赖的标签,无法集中管理;
-
可以集中自定义属性,然后分别引用属性值,
-
自定义属性在properties标签中:
<properties> <!-- 自定义lombo版本号 --> <lombo.version>1.18.24</lombo.version> </properties> <!-- 分别在dependencyManagement中引用 --> <dependencyManagement> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lom.version}</version> </dependencyManagement>
-
-
-
<dependencyManagement>和<dependencies>的区别:
- <dependencies>:是直接依赖,会继承父工程;
- <dependencyManagement>:是同一管理依赖版本,不会以直接依赖,对应依赖还需要在子工程引入;
-
-
聚合:
-
模块之间的打包问题,一次性打包,
-
聚合工程【父工程】;
<modules> </modules>
-
-
私服:
- 项目共享问题;
- 相当于局域中转站【中央仓库无法上传】;
- 上传和下载

浙公网安备 33010602011771号