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容器中【配置文件的属性和值的判断】;
    • 是自定义起步依赖:
      • 自动配置功能:设置配置条件类【其他类的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>
      
  • 私服:

    • 项目共享问题;
    • 相当于局域中转站【中央仓库无法上传】;
    • 上传和下载
posted @ 2025-03-27 22:55  烟雨断桥  阅读(15)  评论(0)    收藏  举报