当前位置: 首页 > news >正文

JavaWeb开发_Day14

参考课程:

黑马程序员 JavaWeb开发教程】

[https://www.bilibili.com/video/BV1m84y1w7Tb]

@ZZHow(ZZHow1024)

配置优先级

  • 配置文件优先级顺序:application.properties > application.yml > application.yaml

    虽然 SpringBoot 支持多种格式配置文件,但是在项目开发时,推荐统一使用一种格式的配置
    (.yml 是主流)。

  • SpringBoot 除了支持配置文件属性配置,还支持 Java 系统属性和命令行参数的方式进行属性配置。

    • Java 系统属性:-Dserver.port=9000

      • IntelliJ IDEA 中的选项:VM options。
    • 命令行参数:--server.port=10010

      • IntelliJ IDEA 中的选项:Program arguments。
    • 执行 Maven 打包指令 package 后,运行 JAR 包时进行配置:

      java -Dserver.port=9000 -jar xxx.jar --server.port=10010
      
  • 优先级:命令行参数(–xxx=xxx) > Java 系统属性(-Dxxx=xxx) > application.properties > application.yml > application.yaml

Bean管理

  • 获取 Bean

    • 默认情况下,Spring 项目启动时,会把 Bean 都创建好放在 IOC 容器中,如果想要主动获取这些 Bean,可以通过如下方式:
      • 根据 name 获取 Bean:Object getBean(String name)
      • 根据类型获取 Bean:<T> T getBean(Class<T> requiredType)
      • 根据 name 获取 Bean(带类型转换):<T> T getBean(String name, Class<T> requiredType)
  • Bean 作用域

    • Spring 支持五种作用域,后三种在 Web 环境才生效:

      作用域说明
      singleton容器内同名称的 Bean 只有一个实例(单例)(默认)
      prototype每次使用该 Bean 时会创建新的实例(非单例)
      request每个请求范围内会创建新的实例(Web 环境中,了解)
      session每个会话范围内会创建新的实例(Web 环境中,了解)
      application每个应用范围内会创建新的实例(Web 环境中,了解)
  • 通过 @Scope 注解来配置作用域

    //@Lazy
    @Scope("prototype")
    @RestController
    @RequestMapping("/depts")
    public class DeptController {
    }
    
    • 默认 singleton 的 Bean,在容器启动时被创建,可以使用 @Lazy 注解来延迟初始化(延迟到第一次使用时)。
    • prototype 的 Bean,每一次使用该 Bean 的时候都会创建一个新的实例。
    • 实际开发当中,绝大部分的 Bean 是单例的,绝大部分 Bean 不需要配置 Scope属性。
  • 第三方 Bean

    • @Bean 注解

      • 如果要管理的 Bean 对象来自于第三方(不是自定义的),是无法用 @Component 及衍生注解声明 Bean 的,就需要用到 @Bean 注解。
      //直接在启动类中声明,不推荐
      @SpringBootApplication
      public class SpringbootWebConfig2Application {@Bean //将方法返回值交给 IOC 容器管理,成为 IOC 容器的 Bean 对象public SAXReader saxReader(//类名 对象(自动注入)) {return new SAXReader();}
      }
      
      • 若要管理的第三方 Bean 对象,建议对这些 Bean 进行集中分类配置,可以通过 @Configuration 注解声明一个配置类。
      //在配置类中声明,推荐
      @Configuration
      public class CommonConfig {@Beanpublic SAXReader saxReader() {return new SAXReader();}
      }
      
    • 通过 @Bean 注解的 name 或 value 属性可以声明 Bean 的名称,如果不指定,默认 Bean 的名称就是方法名。

    • 如果第三方 Bean 需要依赖其它 Bean 对象,直接在 Bean 定义方法中设置形参即可,容器会根据类型自动装配。

    • 总结:

      • 项目中自定义的,使用 @Component 及其衍生注解。
      • 项目中引入第三方的,使用 @Bean 注解。
  • Spring Boot 原理

    • Spring 框架
      • Spring Framework(依赖配置繁琐)
      • Spring Boot(简化 Spring 的配置)
    • Spring Boot 优势
      • 起步依赖
        • 原理:Maven 的依赖传递。
      • 自动配置
        • SpringBoot 的自动配置就是当 Spring 容器启动后,一些配置类、Bean 对象就自动存入到了 IOC 容器中,不需要手动声明,从而简化了开发,省去了繁琐的配置操作。
        • 自动配置原理
          • 方案一:@ComponentScan 组件扫描

            @ComponentScan({"com.example", "com.zzhow"})
            @SpringBootApplication
            public class SpringbootwebConfig2Application {
            }
            
            • 实际开发中会引入大量第三方依赖,需要配置的包会非常多,此方案将很繁琐。
          • 方案二:@Import 导入。使用 @Import 导入的类会被 Spring 加载到 IOC 容器中,导入形式主要有以下几种:

            • 导入普通类
            • 导入配置类
            • 导入 ImportSelector 接口实现类
            • @EnableXxx 注解,封装 @Import 注解(第三方依赖作者自己封装)
        • 源码跟踪
          • @SpringBootApplication 注解:该注解标识在 SpringBoot 工程引导类上,是 SpringBoot 中最重要的注解。该注解由三个部分组成:
            • @SpringBootConfiguration 注解:与 @Configuration 注解作用相同,用来声明当前也是一个配置类。
            • @ComponentScan:组件扫描,默认扫描当前引导类所在包及其子包。
            • @EnableAutoConfiguration: SpringBoot 实现自动化配置的核心注解。
        • @Conditional 注解
          • 作用:按照一定的条件进行判断,在满足给定条件后才会注册对应的 Bean 对象到 Spring IOC 容器中。
          • 位置:方法、类
            @Conditional 注解本身是一个父注解,派生出大量的子注解:
            • @ConditionalOnClass注解:判断环境中是否有对应字节码文件,才注册 Bean 到 IOC 容器。
            • @ConditionalOnMissingBean 注解:判断环境中没有对应的 Bean(类型或名称),才注册 Bean 到 IOC 容器。
            • @ConditionalOnProperty 注解:判断配置文件中有对应属性和值,才注册 Bean 到 IOC 容器。
            • ……
    • 自定义 starter
      • 场景:在实际开发中,经常会定义一些公共组件,提供给各个项目团队使用。而在 SpringBoot 的项目中,一般会将这些公共组件封装为 SpringBoot 的 starter。
      • 命名规范:
        • Spring Boot 官方:spring-boot-starter-功能名
          • 如:
            • Maven: org.springframework.boot:spring-boot-autoconfigure:3.3.2(自动配置功能)
            • Maven: org.springframework.boot:spring-boot-starter-web:3.3.2(依赖管理功能)
        • 第三方提供:功能名-spring-boot-starter
          • 如:
            • Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:3.0.3
            • Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.3
            • Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.4.7
            • Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.4.7
      • 步骤:
        • 创建 xxx-spring-boot-starter 模块(依赖管理功能)。
        • 创建 xxx-spring-boot-autoconfigure 模块(自动配置功能),在 starter 中引入该模块。
        • 在 aliyun-oss-spring-boot-autoconfigure 模块中的定义自动配置功能,并定义自动配置文件 META-INF/spring/xxx.imports。

Web后端开发总结

Web后端开发架构

Web后端开发架构

Spring框架体系

Spring框架体系

http://www.dtcms.com/a/334301.html

相关文章:

  • 如何在 Ubuntu 24.04 Server 或 Desktop 上安装 XFCE
  • 我的世界Java版1.21.4的Fabric模组开发教程(十八)自定义传送门
  • 边缘计算及其特点
  • 学习日志35 python
  • Python Day30 CSS 定位与弹性盒子详解
  • CodeBuddy IDE深度体验:AI驱动的全栈开发新时代
  • 缓存一致性总线协议(Cache Coherence Protocols)的发展过程
  • LangChain4j:基于 SSE 与 Flux 的 AI 流式对话实现方案
  • Honor of Kings 100star (S40) 2025.08.16
  • 11-verilog的RTC驱动代码
  • 10-verilog的EEPROM驱动-单字节读写
  • OpenCV安装及配置
  • 机器学习核心概念精要:从定义到评估
  • 从频繁告警到平稳发布:服务冷启动 CPU 风暴优化实践222
  • 利用 Java 爬虫按图搜索淘宝商品(拍立淘)实战指南
  • AirReceiverLite:轻松实现手机隔空投屏
  • [typescript] interface和type有什么关系?
  • Spark 数据分发性能深度剖析:mapPartitions vs. UDF – 你该选择哪一个?
  • 矩阵链相乘的最少乘法次数(动态规划解法)
  • KVM虚拟化技术解析:从企业应用到个人创新的开源力量
  • Langfuse2.60.3:独立数据库+docker部署及环境变量详细说明
  • AutoDL使用学习
  • 第二十八节 业务代表模式
  • Custom SRP - Baked Light
  • tree组件(几种不同分叉树Vue3)
  • Qt QDateTime时间部分显示为全0,QTime赋值后显示无效问题【已解决】
  • 从零开始大模型之实现GPT模型
  • 黑板架构详解
  • Wi-Fi 7 将如何重塑互联工作场所
  • 链式二叉树的基本操作——遍历