首页 > 其他分享 >【博学谷学习记录】超强总结,用心分享|狂野架构Spring设计理念及核心组件

【博学谷学习记录】超强总结,用心分享|狂野架构Spring设计理念及核心组件

时间:2022-11-20 21:57:24浏览次数:47  
标签:对象 Spring 狂野 Bean Context 超强 组件 BeanDefinition

1. Spring架构设计

Spring框架是一个分层架构,他包含一系列的功能要素,并被分为大约20个模块

2. 设计理念

Spring是面向Bean的编程(BOP:Bean Oriented Programming),Bean在Spring中才是真正的主角。Bean在Spring中作用就像Object对OOP的意义一样,没有对象的概念就像没有面向对象编程,Spring中没有Bean也就没有Spring存在的意义。Spring提供了IoC 容器通过配置文件或者注解的方式来管理对象之间的依赖关系。

控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用传递给它。

3. 核心组件介绍

Bean组件

Bean组件定义在Spring的org.springframework.beans包下,解决了以下几个问题:

这个包下的所有类主要解决了三件事:

  • Bean的定义
  • Bean的创建
  • Bean的解析

Spring Bean的创建是典型的工厂模式,它的顶级接口是BeanFactory。

BeanFactory有三个子类:ListableBeanFactory、HierarchicalBeanFactory和AutowireCapableBeanFactory。目的是为了区分Spring内部对象处理和转化的数据限制

但是从图中可以发现最终的默认实现类是DefaultListableBeanFactory,它实现了所有的接口

Bean定义:BeanDefinition

这里的 BeanDefinition 就是我们所说的 Spring 的 Bean,我们自己定义的各个 Bean 其实会转换成一个个 BeanDefinition 存在于 Spring 的 BeanFactory 中

public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFactory
        implements ConfigurableListableBeanFactory, BeanDefinitionRegistry, Serializable {

    private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>(256); 
}  

BeanDefinition 中保存了我们的 Bean 信息,比如这个 Bean 指向的是哪个类、是否是单例的、是否懒加载、这个 Bean 依赖了哪些 Bean 等等。

Context组件

Context在Spring的org.springframework.context包下

Context模块构建于Core和Beans模块基础之上,提供了一种类似于JNDI注册器的框架式的对象访问方法.Context模块继承了Beans的特性,为Spring核心提供了大量扩展,添加了对国际化(例如资源绑定)、事件传播、资源加载和对Context的透明创建的支持

ApplicationContext是Context的顶级父类

ApplicationContext 的子类主要包含两个方面:

  1. ConfigurableApplicationContext 表示该 Context 是可修改的,也就是在构建 Context 中用户可以动态添加或修改已有的配置信息
  2. WebApplicationContext 顾名思义,就是为 web 准备的 Context 他可以直接访问到 ServletContext,通常情况下,这个接口使用少

再往下分就是按照构建 Context 的文件类型,接着就是访问 Context 的方式。这样一级一级构成了完整的 Context 等级层次。

总体来说 ApplicationContext 必须要完成以下几件事:

  • 标识一个应用环境
  • 利用 BeanFactory 创建 Bean 对象
  • 保存对象关系表
  • 能够捕获各种事件

标签:对象,Spring,狂野,Bean,Context,超强,组件,BeanDefinition
From: https://www.cnblogs.com/xieshier/p/16909685.html

相关文章

  • 【Spring系列】- Spring事务底层原理
    Spring事务底层原理......
  • Jenkins容器<二>---发布springboot项目 20221004
    一、Jenkins容器<->---通过docker安装 20221004 二、Jenkins容器<二>---发布springboot项目 20221004   1、系统配置      安装插件 ......
  • springboot创建可执行文件jar
    要创建可执行文件jar,我们需要将spring-boot-maven-plugin添加到我们的pom.xml中。要做到这一点,请在dependencies部分下方插入以下行:<build><plugins><plug......
  • SpringBoot日志框架LogBack
    logback记录器的属性依赖SpringBoot天生集成了logback日志框架,因此想要输出日志,根本不用再引入多余的依赖日志文件说明appender-为日志输出目的地,log4提供的ap......
  • SpringMVC - 获取请求参数,作用域
    一、获取请求参数1.原生serveltAPI@ControllerpublicclassTestController{@RequestMapping("/test01")publicStringtest01(HttpServletRequestrequest){......
  • 【博学谷学习记录】超强总结,用心分享 集合重要知识点。
    集合1.1常见的数据结构常见的数据结构有:数组、栈、队列、链表、树、散列、堆、图等。数组是最常用的数据结构,数组的特点是长度固定,数组的大小固......
  • Spring
    对象是由Spring创建的对象属性是由Spring容器设置的控制:谁来控制对象的创建,传统应用程序的对象是由程序本身控制创建的,使用Spring后,对象是由Spring来创建的反转:程序本身......
  • 【博学谷学习记录】超强总结,用心分享|moco
    一、介绍1、什么是mock1)mock就是对于一些难以构造的对象,使用虚拟的技术来实现测试的过程。2)mock测试:在测试过程中,对于某些不容易构造或者不容易获取的对象,可以用一个虚......
  • ES教程-springboot整合ES
    1、springboot如何整合ES1、导入坐标(下面是老版本的es坐标官方已经不推荐使用)<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-b......
  • springboot+vue 前后端分离项目对 token 的无痛刷新
    前言最近在做一个系统时,使用了token令牌来进行前后端交互的权限认证。token一般用于前端向后端发起请求时的权限认证。用户登录自己的账号后,会得到一个token,放在每......