• Spring Boot常规知识整理


    目录

    一、 核心概念

    1、控制反转(Spring IOC)

    Bean 的生命周期

    Spring 两种 IOC 容器:

    BeanFactory

    ApplicationContext

    2、依赖注入(DI)

    2、面向切面编程(Spring AOP)

    3、命名服务——JNDI

    4、事务服务——JTA

    5、注解

    二、 Spring Cloud

    1、服务治理

    2、客户端负载均衡:Spring Cloud Ribbon

    3、服务容错保护:Spring Cloud Hystrix

    4、声明式服务调用:Spring Cloud Feign

    5、API网关服务:Spring Cloud Zuul

    6、分布式配置中心:Spring Cloud Config

    7、消息总线:Spring Cloud Bus

    8、消息驱动的微服务:Spring Cloud Stream

    9、分布式服务跟踪:Spring Cloud Sleuth

    三、 Spring底层技术

    1、设计模式:

    2、循环依赖

    3、@Autowired 和 @Resource 区别

    4、自动装配原理

    5、事件

    四、 Spring Boot应用实践


    一、 核心概念

    1、控制反转(Spring IOC)

    • 概念:IOC容器负责装载对象;把对象的控制权交给了 spring,由 spring 容器进行管理
    • 目的:由容器创建、装载对象,降低人为依赖关系管理;
    • 原理:反射和工厂模式,反射原理使得我们通过对象的描述信息可生产出完整的对象,工厂模式使得IOC代码更加松耦合更合家里的生产Bean对象。

    Bean 的生命周期

    • 实例化bean
      • 对于BeanFactory容器:当请求未初始化bean时,BeanFactory调用createBean()进行实例化。
      • 对于ApplicationContext容器:当容器启动后,获取对象BeanDefinition信息,实例化所有Bean
    • 设置对象属性(依赖注入)
      • 实例化后的对象封装在BeanWrapper中,容器根据BeanDefinition中的信息和BeanWrapper对象提供的设置属性的接口完成依赖。
      • BeanDefinition实际上包括一些Bean的信息,比如BeanName, Scope, 是否被**@Primary注解修饰,是否是@Lazy**,以及**@Description**等注解
    • 处理Aware接口:用户可以实现各种Aware接口进行自定义功能;在进行到此处,容器会调用Aware接口进行实现(比如BeanFactoryAware)
      • 如果实现了BeanNameAware接口,会调用实现setBeanName(String beanId)方法,参数为spring中bean的id值
      • 如果实现了BeanFactoryAware接口,会调用实现setBeanFactory()方法,传递spring工厂本身。
      • 如果实现了ApplicationContextAware接口,会调用setApplicationContext(ApplicationContext)方法,传入Spring上下文。
    • BeanPostProcessor:BeanPostProcessor可以根据次接口进行扩展功能,比如AOP
      • 如果想对Bean进行一些自定义的处理,那么可以让Bean实现了BeanPostProcessor接口,那将会调用postProcessBeforeInitialization(Object obj, String s)方法。由于这个方法是在Bean初始化结束时调用的,所以可以被应用于内存或缓存技术;
    • InitializingBean和init-method
      • 如果Bean在Spring配置文件中配置了 init-method 属性,则会自动调用其配置的初始化方法。
    • 如果这个Bean实现了BeanPostProcessor接口,将会调用postProcessAfterInitialization(Object obj, String s)方法;
    • 以上几个步骤完成后,Bean就已经被正确创建了,之后就可以使用这个Bean了。
    • DisposableBean:当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean这个接口,会调用其实现的destroy()方法;
    • destroy-method:最后,如果这个Bean的Spring配置中配置了destroy-method属性,会自动调用其配置的销毁方法。

    Spring 两种 IOC 容器:

    • BeanFactory:只提供了最基本的实例化对象和拿对象的功能;
    • ApplicationContext:继承自BeanFactory,提供注解注入、国际化等功能;

    BeanFactory

    管理方式:

    • 在XML中进行显式配置。
    • 在Java中进行显式配置。
    • 注解方式。

    注入方式:

    • 构造方法注入。
    • setter方法注入。
    • 注解方式注入。

    ApplicationContext

    • BeanFactory:能够管理和装配Bean。
    • ResourcePatternResolver:能够加载资源文件。
    • MessageResource:能够实现国际化等功能。
    • ApplicationEventPublisher:能够注册监听器,实现监听机制。

    2、依赖注入(DI)

    组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。

    2、面向切面编程(Spring AOP)

    3、命名服务——JNDI

    4、事务服务——JTA

    ?事务隔离级别、事务的传播机制

    5、注解


    @Required 注解
    @Autowired 注解
    @Qualifier 注解

    二、 Spring Cloud


    1、服务治理

    2、客户端负载均衡:Spring Cloud Ribbon

    3、服务容错保护:Spring Cloud Hystrix

    4、声明式服务调用:Spring Cloud Feign

    5、API网关服务:Spring Cloud Zuul

    6、分布式配置中心:Spring Cloud Config

    7、消息总线:Spring Cloud Bus

    8、消息驱动的微服务:Spring Cloud Stream

    9、分布式服务跟踪:Spring Cloud Sleuth

    三、 Spring底层技术


    1、设计模式:

    • 工厂设计模式: 比如通过 BeanFactory 和 ApplicationContext 来生产 Bean 对象
    • 代理设计模式: AOP 的实现方式就是通过代理来实现,Spring主要是使用 JDK 动态代理和 CGLIB 代理
    • 单例设计模式: Spring 中的 Bean 默认都是单例的
    • 模板方法模式: Spring 中 jdbcTemplate 等以 Template 结尾的对数据库操作的类,都会使用到模板方法设计模式,一些通用的功能
    • 包装器设计模式: 我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库。这种模式让我们可以根据客户的需求能够动态切换不同的数据源
    • 观察者模式: Spring 事件驱动模型观察者模式的
    • 适配器模式:Spring AOP 的增强或通知(Advice)使用到了适配器模式

    2、循环依赖


    spring 使用三级缓存去解决循环依赖的,其「核心逻辑就是把实例化和初始化的步骤分开,然后放入缓存中」,供另一个对象调用

    「第一级缓存」:用来保存实例化、初始化都完成的对象
    「第二级缓存」:用来保存实例化完成,但是未初始化完成的对象
    「第三级缓存」:用来保存一个对象工厂,提供一个匿名内部类,用于创建二级缓存中的对象

    3、@Autowired 和 @Resource 区别


    「@Resource 是 Java 自己的注解」,@Resource 有两个属性是比较重要的,分是 name 和 type;Spring 将 @Resource 注解的 name 属性解析为 bean 的名字,而 type 属性则解析为 bean 的类型。所以如果使用 name 属性,则使用 byName 的自动注入策略,而使用 type 属性时则使用 byType 自动注入策略。如果既不指定 name 也不指定 type 属性,这时将通过反射机制使用 byName 自动注入策略。
    「@Autowired 是spring 的注解」,是 spring2.5 版本引入的,Autowired 只根据 type 进行注入,「不会去匹配 name」。如果涉及到 type 无法辨别注入对象时,那需要依赖 @Qualifier 或 @Primary 注解一起来修饰。


    4、自动装配原理


    1.容器在启动的时候会调用 EnableAutoConfigurationImportSelector.class 的 selectImports方法「获取一个全面的常用 BeanConfiguration 列表」
    2.之后会读取 spring-boot-autoconfigure.jar 下面的spring.factories,「获取到所有的 Spring 相关的 Bean 的全限定名 ClassName」
    3.之后继续「调用 filter 来一一筛选」,过滤掉一些我们不需要不符合条件的 Bean
    4.最后把符合条件的 BeanConfiguration 注入默认的 EnableConfigurationPropertie 类里面的属性值,并且「注入到 IOC 环境当中」


    5、事件


    Spring 提供了以下5 种标准的事件:
    (1)上下文更新事件(ContextRefreshedEvent):在调用
    ConfigurableApplicationContext 接口中的refresh()方法时被触发。
    (2)上下文开始事件(ContextStartedEvent):当容器调用
    ConfigurableApplicationContext 的Start()方法开始/重新开始容器时触发该事件。
    (3)上下文停止事件(ContextStoppedEvent):当容器调用
    ConfigurableApplicationContext 的Stop()方法停止容器时触发该事件。
    (4)上下文关闭事件(ContextClosedEvent):当ApplicationContext 被关闭
    时触发该事件。容器被关闭时,其管理的所有单例Bean 都被销毁。
    (5)请求处理事件(RequestHandledEvent):在Web 应用中,当一个http 请
    求(request)结束触发该事件。
    如果一个bean 实现了ApplicationListener 接口,当一个ApplicationEvent 被发
    布以后,bean 会自动被通知


    四、 Spring Boot应用实践

  • 相关阅读:
    算法优化,最短路径。
    Linux下创建和删除用户
    Linux下gcc和gdb的基本使用
    07-服务管理-02-yum常用命令和yum源
    RabbitMQ:使用Java、Spring Boot和Spring MVC进行消息传递
    基于SqlSugar的开发框架循序渐进介绍(4)-- 在数据访问基类中对GUID主键进行自动赋值处理
    springboot+jsp项目校园外卖配送系统
    CISSP学习笔记:密码学与对称加密算法
    SpringBoot集成MyBatis
    vue3 ref 和 reactive 区别
  • 原文地址:https://blog.csdn.net/jingmiaowill/article/details/126465506