Spring创建Bean的流程
大致步骤
简单来说:Bean会经历四个阶段: 实例化–》属性赋值–》初始化–》销毁
具体来说:
实例化:new xxx();有两个时候会触发实例化:
- 像容器申请一个Bean的时候
- 当容器在初始化一个Bean的时候,发现该Bean还依赖另一个Bean。(在BeanDefinition中找到)
设置对象属性:通过BD找到Bean需要注入的一些属性,并注入,当发现依赖另一个对象时,触发另一个对象的实例化。
处理Aware接口:Spring会检测对象是否实现了XxxAware接口,如果实现了,就会调用对应的方法。例如BeanNameAware(对BeanName进行设置)、BeanClassLoaderAware(传入一个自定义类加载器)、BeanFactoryAware(扩展BeanFactory)
BeanPostProcessor的前置处理。
initializingBean: Spring检测对象如果实现了这个接口,就会执行他的afterPropertiesSet()方法,定制初始化逻辑。
init-method:,如果Spring发现Bean实现了这个属性,就会调用他的配置方法,执行初始化逻辑。或者使用注解
BeanPostProcessor的后置处理
到目前位置,Bean的创建过程就完成了,可以正常使用了。
DisposableBean:当Bean实现了这个接口,在销毁前就会调用destory()方法
destory-method:销毁方法,可以进行内存回收,通过@PreDestory注解
各个接口介绍
1.什么是BeanDefinition?
BeanDefinition 是定义 Bean 的配置元信息接口
- Bean 的类名
- 设置父 bean 名称
- Bean 行为配置信息,作用域、自动绑定模式、生命周期回调、延迟加载、初始方法、销毁方法等
- Bean 之间的依赖设置,dependencies
- 构造参数、属性设置
2.Aware接口
该接口是一个标识接口,具体的方法需要子类自己去实现。
Aware类型的接口的作用就是让我们能够拿到Spring容器中的一些资源。基本都能够见名知意,Aware之前的名字就是可以拿到什么资源,例如BeanNameAware可以拿到BeanName,以此类推。调用时机需要注意:所有的Aware方法都是在初始化阶段之前调用的!
3.BeanPostProcessor
做通知。
4.initializingBean
afterPropertiesSet这个方法可以用在一些特殊情况中,也就是某个对象的某个属性需要经过外界得到,比如说查询数据库等方式,这时候可以用到spring的该特性,只需要实现InitializingBean即可
5.init-method
用来替代继承 InitializingBean接口
Spring创建Bean的流程相关推荐
- Spring源码系列(十二)Spring创建Bean的过程(二)
1.写在前面 上篇博客主要Spring在创建Bean的时候,第一次调用的Bean的后置处理器的过程,同时笔者也打算将整个Spring创建的Bean的过程,通过这个系列,将Bean的创建过程给讲清楚,废 ...
- 通过Debug带你详细了解Spring创建Bean的过程,一清二楚!
Spring流程Debug 1.1 Spring测试环境搭建 Spring模块概览,绿色是模块,Spring中八大模块,黑色表示该模块包含的jar包(组件).例如我们想要用IOC容器,也就是绿色的Co ...
- Spring创建Bean的3种方式
1. Spring创建Bean的三种方式 1. 调用构造器(因为常用就不讲) 2. 调用静态工厂方法 3. 调用实例工厂方法 2. 使用静态工厂方法 1.此时<bean.../>元素要指定 ...
- Spring创建Bean的基本步骤
最简单的spring创建Bean主要分为以下几个步骤: 加载Class类 调用构造方法 设置属性 回调Aware(BeanNameAware, BeanFactoryAware) 回调初始化方法(In ...
- Spring5——(一)spingIOC(入门介绍,spring创建bean,依赖,注入,注解方式)
为什么要有框架? (1)对于web层来说,一个大型的程序往往需要编写大量的servlet,并且取值封装会非常繁琐. (2)对于dao层,要编写大量的sql语句,对于结果的解析也很麻烦,并且sql的复用 ...
- spring创建bean模式singleton与prototype的区别
spring 创建bean有单例模式(singleton)和原始模型模式(prototype)这两种模式. 在默认的情况下,Spring中创建的bean都是单例模式的(注意Spring的单例模式与Go ...
- Spring创建Bean的三种方式的使用和区别
在学习Spring的时候,发现Spring的IOC(控制反转)为我们提供的三种创建Bean的方式. 1.Spring创建Bean的三种方式 这里采用XML配置,分别演示三种创建Bean的方式和代码. ...
- Spring创建Bean的全过程Debug,没人能说的这么通透了
作者:x1aoda1 https://www.cnblogs.com/darope/p/13917264.html 1.1 Spring测试环境搭建 Spring模块概览,绿色是模块,Spring中八 ...
- Spring 创建Bean的三种方式
创建Bean的三种方式 第一种方式:使用默认构造函数创建. 在spring的配置文件中使用bean标签,配以id和class属性之后,且没有其他属性和标签时.采用的就是默认构造函数创建bean对象,此 ...
最新文章
- nsTimer的简单用法
- vim 初学简单设置
- 用户控件的后台代码关联使用CodeBehind还是CodeFile
- python购物车程序-Python编写购物车程序
- 1 HBase 介绍
- OpenCASCADE:拓扑 API之3D模型周期性
- python 怎么安装电脑摄像头模块_Python模块及安装
- Qt工作笔记-三种方式解决Qt5中文编码问题
- PubMedQA生物医学研究问题解答数据集(2019)下载
- c# 如何读取和写入ini(配置文件)
- 《健康报》携手健康之路帮助医院医生免费搭建微官网
- ZStack 3.6.0发布:支持云主机从KVM云平台在线迁移至ZStack
- java 四级联动,省市区镇四级联动附代码和数据库
- unity3D数据的本地存储(xml的方式)
- 谭浩强C++ 第八章
- 模块递归拆分法: 设计模式 设计原则,复杂层次设计举例。系统重构 装饰模式,门面模式,代理模式
- js 滚动显示获奖名单
- 统计学名词解释 —— 2. 什么是「总体」和「样本」
- 分享一个看起来挺酷眩的canvas做的粒子漩涡
- Python之数据分析(三维立体图像、极坐标系、半对数坐标)
热门文章
- ActiveMQ详细的介绍
- 所需即所获:IDE = _plugins_ + vim
- RabbitMQ ACK消息确认机制 快速入门
- 西门子S71200连接多功能电表
- 计算机管理用房设置要求,综合医院建筑规范(放射科用房)
- 【Android开发VR实战】二.播放360°全景视频
- 使用FFMPEG库封装264视频和acc音频数据到MP4文件中
- 蓝海彤翔执行副总裁张加廷接受【联播苏州】独家专访
- OneNET物联网平台介绍
- github 下载文件加速 https://moeyy.cn/gh-proxy/