JavaWeb开发_Day14

发布于:2025-08-17 ⋅ 阅读:(12) ⋅ 点赞:(0)

参考课程:

黑马程序员 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 {
      	@Bean
      	public 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框架体系


网站公告

今日签到

点亮在社区的每一天
去签到