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对象,此 ...
最新文章
- Python变量作用域问题
- Python3--批量爬取数据之调用有道api进行翻译
- 如何在Hadoop上编写MapReduce程序
- Python:非常详细的解释如何判断某个变量的类型以及代码实现
- 用jsp实现登录界面
- LeetCode:Sudoku Solver Valid Sudouku
- WPF 模仿IconPacks库写图标按钮
- 在Windows中为文件添加“可执行”权限(chmod +x 文件名 不起作用)
- 可靠性测试设备技术含量_品牌手机厂商为何如此重视可靠性测试,海拓仪器一语道破玄机...
- Redis-主从配置
- 007. VMware 创建共享文件夹
- Java基础篇:带自变量的构造函数
- FFmpeg采集树莓派USB摄像头(UVC摄像头)
- Hello!GitHub 好用好玩值得收藏的开源项目集合~
- Photoshop CS2 视频教程-PS合并图层(转)
- 在多台终端设备的i茅台应用中,实现同时自动化预约X酒的解决方案
- CCRC信息安全服务资质申请流程详解
- 【Android开发日记】jsonObject = new JSONObject(info)报错 A JSONObject text must begin with '{' at character
- 国外LEAD域名邮箱获取途径
- 单片机自制时钟(年月日星期时分秒显示、按键校准)
热门文章
- 抗衰老秘方盘点:枸杞子可养肝防衰老
- 关于cmd打开时提示“系统找不到指定的路径”问题
- 上海电气“星云智汇”工业互联网平台
- 2022最新软件测试面试题
- CISCO-路由器交换机密码恢复
- 学习java web感想_学了近一个月的java web 感想
- 基于ZigBee 的多点温度采集系统设计与实现
- 最新-安装Windows与Ubuntu双系统
- Install Mercury MW150US WIFI dongle on RPi
- 白苹果如何制作自己的OS X 10.9“巨浪”可引导系统安装盘?