spring 的理解

spring 的理解

  1. spring 是一个基础的框架,同时提高了一个Bean 的容器,用来装载Bean对象
  2. spring会帮我们创建Bean 对象并维护Bean对象 的生命周期。
  3. 在spring 框架上,还有springCloud,spring Boot 的技术框架,都是以Spring为基石的
  4. spring 有两个核心,就是IOC和AOP

Spring IOC 是什么?

  • 控制反转,将对象和对象的关系由spring 统一管理,而这些对象统称 Bean
  • IOC本质上就是一个对象工厂:使用时需要将bean实例化,
    Spring提供了IOC容器的两种实现方式
    ​ ① BeanFactory接口:是面向Spring本身的,不是提供给开发人员使用的
    ​ ② ApplicationContext接口:BeanFactory的子接口,面向开发人员使用

Spring AOP 是什么?

  • 面向切面编程
  • 我们可以将一些与业务逻辑无关的代码,来通过切面来实现,比如:日志,权限控制,事务管理,接口限制
  • 在使用中,我们需要实现前置方法,后置方法,通知等

IOC 容器是怎么实现的?

  1. 配置Bean
    通过xml或者是@Component @Bean 等进行配置

  2. 解析Bean,得到BeanDefinition定义对象
    通过 BeanDefintionReader 将 bean 进行解析,准备要创建的bean对象的定义对象BeanDefinition,存放到BeanDefintionMap 中,将beanName和bean值进行保存

  3. 实例化bean
    BeanFactory通过反射的方式j将BeanDefinition定义对象实例化成具体的bean对象
    注意:在这之前也可以进行beanFactoryPostProcessor(Bean的增强器)的处理,我们可以根据获取到的BeanDefinition 定义对象做特殊处理

  4. 初始化Bean
    (1)填充属性: 通过populateBean 填充属性
    (2)执行aware 接口所实现的方法:方便通过bean对象来获取容器中的属性值
    (3)调用BeanPostProcessor前置处理方法:AOP等都在这里实现
    (4)调用init-mehtod方法
    (5)调用BeanPostProcessor的后置处理方法

  5. 生成Bean
    通过getBean方法可以直接获取

  6. 销毁Bean

Bean 的生命周期

在这里插入图片描述

1 实例化bean: BeanFactory通过反射的方式j将BeanDefinition定义对象实例化成具体的bean对象
2. 填充属性: 通过populateBean 填充属性
3. 执行aware 接口所实现的方法:方便通过bean对象来获取容器中的属性值
4. 调用BeanPostProcessor前置处理方法:
5. 调用 init-mehtod方法
6.调用BeanPostProcessor的后置处理方法:AOP等都在这里实现
7. 通过getBean 来获取Bean
8. x销毁Bean

扩展

Spring是如何简化开发的?

  • 通过依赖注入和面向接口实现松耦合
  • 基于切面和惯例进行声明式编程
  • 通过切面和模板减少样板式代码

Spring IOC的实现机制

  • 简单工厂
  • 反射

什么是Bean,什么是对象

  • Spring 管理对象Bean
  • bean 一定时对象,对象不一定是Bean

相关推荐

  1. 深入理解 Spring Boot ApplicationRunner 接口

    2024-03-27 14:32:06       53 阅读
  2. 关于Spring Bean容器理解

    2024-03-27 14:32:06       57 阅读
  3. 深入理解Spring@Autowired注解

    2024-03-27 14:32:06       26 阅读
  4. 深入理解 Spring Boot 中 MediaType

    2024-03-27 14:32:06       23 阅读
  5. 深入理解Spring Boot中Fastjson

    2024-03-27 14:32:06       23 阅读
  6. SpringIOC与AOP理解(1)

    2024-03-27 14:32:06       49 阅读
  7. 通俗易懂,Spring Bean生命周期管理理解

    2024-03-27 14:32:06       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-27 14:32:06       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-27 14:32:06       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-27 14:32:06       87 阅读
  4. Python语言-面向对象

    2024-03-27 14:32:06       96 阅读

热门阅读

  1. 【go从入门到精通】for和for range的区别

    2024-03-27 14:32:06       36 阅读
  2. lInux 常用命令

    2024-03-27 14:32:06       36 阅读
  3. C#委托与事件

    2024-03-27 14:32:06       38 阅读
  4. pg事务ID清理

    2024-03-27 14:32:06       39 阅读
  5. C#中让字典、列表、数组作为只读的方法参考

    2024-03-27 14:32:06       40 阅读
  6. C#基础-VS中常用代码段快速输入

    2024-03-27 14:32:06       35 阅读
  7. 程序员开发技术整理

    2024-03-27 14:32:06       34 阅读
  8. Vue小练习:记录任务所花费时间

    2024-03-27 14:32:06       45 阅读