SpringBoot(02) -- 自动配置原理

SpringBoot2学习笔记

源码地址

一、SpringBoot2基础入门

二、自动配置原理

2.1)SpringBoot特点

2.1.1)依赖管理

父项目做依赖管理

<!--依赖管理-->  
<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.4.RELEASE</version>
</parent>
​
<!--它的父项目-->  
 <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.3.4.RELEASE</version>
  </parent>
  
<!--其中几乎声明了所有开发中常用的依赖的版本号,自动版本仲裁机制-->  

可以修改默认版本号

<!--1、查看spring-boot-dependencies里面规定当前依赖的版本 用的 key--> 
<!--2、在当前项目里面重写配置--> 
    <properties>
        <mysql.version>5.1.43</mysql.version>
    </properties>

开发导入starter场景启动器

<!--
1、见到很多 spring-boot-starter-* : *就某种场景
2、只要引入starter,这个场景的所有常规需要的依赖我们都自动引入
3、SpringBoot所有支持的场景
https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-starter
4、见到的  *-spring-boot-starter: 第三方为我们提供的简化开发的场景启动器。
5、所有场景启动器最底层的依赖
--> 
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter</artifactId>
  <version>2.3.4.RELEASE</version>
  <scope>compile</scope>
</dependency>
  1. 无需关注版本号,自动版本仲裁

1、引入依赖默认都可以不写版本

2、引入非版本仲裁的jar,要写版本号

2.1.2)自动配置

自动配好Tomcat --> 引入Tomcat依赖,配置Tomcat

 <!--
 1、查看spring-boot-dependencies里面规定当前依赖的版本 用的 key。
 2、在当前项目里面重写配置
 -->
     <properties>
         <mysql.version>5.1.43</mysql.version>
     </properties>
  1. 自动配好SpringMVC

引入SpringMVC全套组件并自动配好SpringMVC常用组件(功能)

  1. 自动配好Web常见功能,如:字符编码问题

SpringBoot帮我们配置好了所有web开发的常见场景;

  1. 默认的包结构

  • 主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来,无需以前的包扫描配置;

  • 想要改变扫描路径,@SpringBootApplication(scanBasePackages="com.study") 或者@ComponentScan 指定扫描路径,如下:

//主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来
@SpringBootApplication
// 修改扫描路径方案一:
//@SpringBootApplication(scanBasePackages="com.study")
// 修改扫描路径方案二:添加下列三个注解代替@SpringBootApplication
//@SpringBootConfiguration
//@EnableAutoConfiguration
//@ComponentScan("com.study")
  1. 各种配置拥有默认值

  • 默认配置最终都是映射到某个类上,如:MultipartProperties

  • 配置文件的值最终会绑定每个类上,这个类会在容器中创建对象

  1. 按需加载所有自动配置项

  • 非常多的starter

  • 引入了哪些场景这个场景的自动配置才会开启

  • SpringBoot所有的自动配置功能都在 spring-boot-autoconfigure 包里面,如下图:

 

2.2)容器功能

2.2.1)组件添加

修改SpringBootDemo1工程中的POM.xml文件,添加lombok,代码如下:

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

新建实体类 Pet.java,代码如下:

@ToString
@Data
@NoArgsConstructor  //无参构造器
@AllArgsConstructor  //全参构造器
public class Pet {
    private String name;
}

新建实体类 User.java,代码如下:

@NoArgsConstructor
@Data
@ToString
@EqualsAndHashCode
public class User {
    private String name;
    private Integer age;
    private Pet pet;
​
    public User(String name, Integer age) {
        this.name = name;
        this.age = age;
    }
}

2.2.1.1)@Configuration

新建配置类 MyConfig.java,代码如下:

@Configuration
public class MyConfig {
    //给容器中添加组件。以方法名作为组件的id。返回类型就是组件类型。返回的值,就是组件在容器中的实例
    @Bean
    public User user01() {
        User zhangsan = new User("zhangsan", 18);
        return zhangsan;
    }
​
    @Bean("tom")
    public Pet tomcatPet() {
        return new Pet("tomcat");
    }
}

上述代码中:

  • 配置类里面使用@Bean标注在方法上给容器注册组件,默认也是单实例的

  • 配置类本身也是组件

修改主程序启动类MainApplication.java,代码如下:

@SpringBootApplication
public class MainApplication {
    public static void main(String[] args) {
        // 默认启动
        // SpringApplication.run(MainApplication.class, args);
        //1、返回我们IOC容器
        ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
        //2、查看容器里面的组件
        String[] names = run.getBeanDefinitionNames();
        for (Strin
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值