SpringBoot高级-底层原理

06-01 1064阅读

SpringBoot高级-底层原理

目录

1 SpringBoot自动化配置原理

01-SpringBoot2高级-starter依赖管理机制

02-SpringBoot2高级-自动化配置初体验

03-SpringBoot2高级-底层原理-@Configuration配置注解

04-SpringBoot2高级-底层原理-@Import注解使用1

05-SpringBoot2高级-底层原理-@Import注解使用2

06-SpringBoot2高级-底层原理-@Conditional衍生条件装配

07-SpringBoot2高级-底层原理-@ConfigurationProperties配置绑定

08-SpringBoot2高级-自动化配置原理-@SpringBootApplication入口分析

09-SpringBoot2高级-自动化配置原理-@EnableAutoConfiguration自动配置注解

10-SpringBoot2高级-自动化配置原理-按条件开启自动配置类和配置项

11-SpringBoot2高级-自动化配置原理-debug全流程

12-SpringBoot2高级-自动化配置原理-总结

2 SpringBoot健康监控

13-SpringBoot2高级-监控-健康监控服务

14-SpringBoot2高级-监控-Admin可视化


  • 理解SpringBoot自动化配置源码
  • 理解SpringBoot健康监控

1 SpringBoot自动化配置原理

01-SpringBoot2高级-starter依赖管理机制

目的:通过依赖能了解SpringBoot管理了哪些starter

讲解:

  1. 通过依赖 spring-boot-dependencies 搜索 starter- 发现非常多的官方starter,并且已经帮助我们管理好了版本。
  2. 项目中使用直接引入对应的 starter 即可,这个场景下需要的依赖就会自动导入到项目中,简化了繁琐的依赖。如果需要修改版本可以有两种方式:
  • 重写maven属性
  • 使用Maven依赖管理的就近原则

      3.引入 starter 不仅仅是帮助我们管理了依赖,还帮我做了很多的默认的配置信息,简化了大量的配置,使用更加的简单。

      4.所有的场景启动器的底层都依赖 spring-boot-starter

  org.springframework.boot
  spring-boot-starter
  2.3.10.RELEASE
  compile

小结:

  • 引入官方starter依赖默认都可以不写版本
  • 如果配置满足您当前开发需要,则默认配置即可
02-SpringBoot2高级-自动化配置初体验

目的:以web MVC自动化配置原理为例讲解,能够理解web MVC自动化配置加入了哪些依赖,做了哪些默认配置。

讲解:

回忆一下:SpringMVC博文中,我们在 SSM整合时;

添加spring及spring web mvc相关依赖

springmvc配置类:

1、扫描controller层

2、静态资源控制

3、......

servlet容器配置类:

1、扫描springmvc配置类

2、扫描spring配置类

3、设置哪些请求交给springmvc处理

4、POST请求乱码过滤器

部署还需要单独的tomcat

也就是说:我们现在需要在开发业务代码前,就必须要准备好这些环境,否则无法完成业务代码,这就是我们现在的问题。

让这些问题成为过去,现在我们就探索一下SpringBoot是如何帮助我们完成强大而又简单自动化配置的。

引入 web 开发场景启动器依赖:


    org.springframework.boot
    spring-boot-starter-web

帮助我们做了以下自动化配置:

  1. 依赖版本和依赖什么jar都不需要开发者关注
  1. 自动化配置
  • 自动配好SpringMVC
    • 引入SpringMVC全套组件
    • 自动配好SpringMVC常用组件(三大组件,文件上传等)
  • 自动配好Web常见功能,如:字符编码问题,静态资源管理
  1. 自动配好Tomcat

小结:

  • 有了SpringBoot以后,让开发人员重点关注业务本身,而不是环境上,提升了开发效率。
03-SpringBoot2高级-底层原理-@Configuration配置注解

目的:掌握@Configuration注解的作用及新特性

讲解:

1、@Configuration注解的作用是替代原始 spring配置文件 功能

演示:

1)编写配置类

package com.itheima.sh.config;
import com.itheima.sh.pojo.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * 1、@Configuration 替代 spring配置文件(配置bean)
 * 2、组件源码中包含 @Component 注解,当前类也会注册到 IOC 容器,默认类名小写
 * 3、默认都是单例的
 */
@Configuration
public class MyConfig {
    
    @Bean   // 默认方法名称作为容器中的name
    public User getUser() {
        return new User();
    }
}

2)在引导类编写代码测试:

@SpringBootApplication
@MapperScan(basePackages = "com.itheima.sh.mapper")
public class DataApplication {
  public static void main(String[] args) {
    ConfigurableApplicationContext applicationContext = SpringApplication.run(DataApplication.class, args);
   // 根据name获取容器中的bean
    User user1 = applicationContext.getBean("getUser", User.class);
    User user2 = applicationContext.getBean("getUser", User.class);
    System.out.println(user1 == user2);
    
    MyConfig myConfig1 = applicationContext.getBean("myConfig", MyConfig.class);
    MyConfig myConfig2 = applicationContext.getBean("myConfig", MyConfig.class);
    System.out.println(myConfig1 == myConfig2);
    // 注意:如果 MYConfig配置类没有按照规范编写,则容器中bean 的name为 类名
  }
}

SpringBoot 提供一个注解和当前注解功能一样:

@SpringBootConfiguration

2、proxyBeanMethods:代理bean的方法属性(since spring 5.2以后)

SpringBoot高级-底层原理

功能:

  • proxyBeanMethods = true:Full模式,保证每个@Bean方法被调用多少次返回的组件都是单实例的
  • proxyBeanMethods = false:Lite模式,每个@Bean方法被调用多少次返回的组件都是新创建的

演示:

  1. 默认 proxyBeanMethods=true,springBoot会检查这个组件是否在容器中有,有则直接引用
// 默认 proxyBeanMethods=true springBoot会检查这个组件是否在容器中有,有则直接引用
User user3 = myConfig1.getUser();
System.out.println(user1 == user3);  // true
  1. 修改 proxyBeanMethods=false,则每调用一次Spring就会创建一个新的Bean对象

SpringBoot高级-底层原理

在执行结果则为 false, 证明两次获取的bean不是同一个bean。

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码