Loading

SpringBoot2笔记-1.3 自动配置原理

第1节 Spring Boot特点

  • 依赖管理
  • 自动配置

特点1 依赖管理

  • 父项目做依赖管理
  • 开发导入starter场景启动器
  • 无需关注版本号,自动版本仲裁

父项目做依赖管理

父项目中声明了开发中所有常用的依赖的版本号,不用担心版本对应的问题。

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.4.RELEASE</version>
</parent>

starter场景启动器

starter申明了常见开发环境中的依赖项目,如果想通过spring jpa访问数据库,可以通过spring-boot-starter-data-jpa一站式导入所有需要的依赖包。
文档/using-spring-boot.html#using-boot-starter 中列举常见的starter以其应用场景。

自动版本仲裁

1、引入依赖默认都可以不写版本
2、引入非版本仲裁的jar,要写版本号

修改默认版本号

可以在当前pom文件中,添加properties标签内容执行自定义版本号。

    <properties>
        <mysql.version>5.1.43</mysql.version>
    </properties>

特点2 自动配置

spring-boot-starter-web举例,SpringBoot自动完成以下自动配置选项。

  • 内置Tomcat
    • 引入Tomcat依赖
    • 自动配置tomcat,如Servlet之类的。
  • 自动配置SpringMVC
    • 自动导入相关的包
    • 配置了常见的springMVC组件,例如字符编码过滤器、文件上传解析器。
    • TODO:添加SpringMVC的笔记链接

第2节 容器功能

Spring提供了帮助管理JavaBean的容器功能,但是Spring Boot进一步了优化了使用步骤。

第一种组件添加,通过在类上添加注解,可以直接将该类申明为由spring管理的bean。
常见的注解由

  • @Configuration
  • @Bean、@Component、@Controller、@Service、@Repository
  • @ComponentScan、@Import

第二种原生配置文件引入,在配置类上添加@ImportResource注解,可以直接导入xml文件配置的bean,适合对以往的项目做整合。

对导入的组件,可将其属性和属性文件中的值绑定。

方式1 组件添加

@Configuration

通过@Configration将一个类声明为配置类,通过方法体配置Bean,同时自身也为一个Bean由Spring管理。

通过其中的Proxybeanmethods属性控制是否按单例模式返回Bean:
赋值True时,为Full模式,返回单例Bean对象。
赋值False时,为Lite模式,每次调用方法将返回一个新的Bean对象。

通过@Bean配置类中的一个方法申明为Bean,Bean对象类型为返回值类型,Bean名称默认为方法名,也可通过往注解中传入字符串指定。

@Bean、@Component、@Controller、@Service、@Repository

这些注解更为常见,将当前类申明为由Spring管理的Bean。

@ComponentScan、@Import

这两个配置导入指定的对象为Spring管理的组件,用于配置类中。

  • @ComponentScan扫描指定包中的所有类。
  • @Import导入特定的类。

@Conditional

对申明由Spring管理的bean,申明注入组件的条件。

方式2 原生配置文件引入

在配置类名上添加@ImportResource注解,导入配置好的xml文件。

@ImportResource("classpath:beans.xml")
public class MyConfig {}

配置绑定

SpringBoot将所有的属性都放在application文件中,文件后缀为yml或者properties。
初始化Bean组件时,可以通过属性文件指定对象的属性。
在组件类的类名上添加@ConfigurationProperties(prefix = "mycar")注解,可以自动读取属性文件中前缀下的属性和类的属性对应,将值用于对象初始化。(可用于一些常见配置,如果datasource、服务端口)

该类需要添加组件注解被Spring发现并管理。SB提供了@EnableConfigurationProperties类注解辅助导入,实际作用和@Import差不多。

第3节 自动配置原理入门

@SpringBootConfigration等价于三个

  • @SpringBootConfiguration,表示配置类
  • @ComponentScan,指定了组件的扫描包
  • @EnableAutoConfiguration,开启了自动配置。

@EnableAutoConfiguration包含两个注解。

  • @AutoConfigurationPackage

封装导入了AutoConfigurationPackages.Registrar.class,通过这个类导入了一系列组件。

  • @Import(AutoConfigurationImportSelector.class)

1、利用getAutoConfigurationEntry(annotationMetadata);给容器中批量导入一些组件

2、调用List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes)获取到所有需要导入到容器中的配置类

3、利用工厂加载 Map<String, List<String>> loadSpringFactories(@Nullable ClassLoader classLoader);得到所有的组件

4、从META-INF/spring.factories位置来加载一个文件。
默认扫描我们当前系统里面所有META-INF/spring.factories位置的文件
spring-boot-autoconfigure-2.3.4.RELEASE.jar包里面也有META-INF/spring.factories

自动配置的项目会由@Conditionnal按需开启
在自己定义的配置类中可以修改默认配置的Bean。

第四节 开发小技巧

Lombok

  • 简化JavaBean开发
@NoArgsConstructor
//@AllArgsConstructor
@Data
@ToString
@EqualsAndHashCode
  • 简化日志开发
@Slf4j  #自动注入log对象以供打印。

dev-tools

修改项目文件后(不包括模板文件),自动重启项目

Spring Initailizr

自助式选择依赖项目,自动创建目录结构,自动写好启动类。

posted @ 2023-01-31 22:51  丘野  阅读(31)  评论(0编辑  收藏  举报