Java_SSH之spring_002_04:初始化和实例化的区别、bean的生命周期

系列文章目录

一、初始化和实例化的区别

第一次赋值就叫初始化
实例化一般是由类创建的对象,在构造一个实例的时候需要在内存中开辟空间,即 Student s = new Student();
初始化 实例化的基础上,并且对 对象中的值进行赋一下初始值

二、bean的生命周期

在这里插入图片描述

生命周期图解释
1.instantiate bean对象实例化
2.populate properties 封装属性
3.如果Bean实现BeanNameAware 执行 setBeanName
4.如果Bean实现BeanFactoryAware 执行setBeanFactory ,获取Spring容器
5.如果存在类实现 BeanPostProcessor(后处理Bean) ,执行postProcessBeforeInitialization
6.如果Bean实现InitializingBean 执行 afterPropertiesSet
7.调用 指定初始化方法 init
8.如果存在类实现 BeanPostProcessor(处理Bean) ,执行postProcessAfterInitialization
执行业务处理
9.如果Bean实现 DisposableBean 执行 destroy
10.调用 指定销毁方法 customerDestroy

具体演示

1.instantiate bean对象实例化

1、创建一个模型,提供给它get、set方法
在这里插入图片描述
再加一个无参构造
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后用它
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
为了更直观再生成一个toString方法
在这里插入图片描述

2.populate properties 封装属性

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
改一下,上面写错了,应该写在这,否则顺序会乱掉,并且不规范
在这里插入图片描述
在这里插入图片描述

3.如果Bean实现BeanNameAware 执行 setBeanName

在这里插入图片描述
实现接口里面的这个方法(也可以理解为接口里面是抽象方法,我们是要必须去实现它的,实现(在C#里面也可以叫继承)了这个接口就要实现它的抽象方法)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.如果Bean实现BeanFactoryAware 执行setBeanFactory ,获取Spring容器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
至此。1-4就演示完毕了

1.instantiate bean对象实例化
2.populate properties 封装属性
3.如果Bean实现BeanNameAware 执行 setBeanName
4.如果Bean实现BeanFactoryAware 执行setBeanFactory ,获取Spring容器
5.如果存在类实现 BeanPostProcessor(后处理Bean) ,执行postProcessBeforeInitialization
6.如果Bean实现InitializingBean 执行 afterPropertiesSet 
7.调用<bean init-method="init"> 指定初始化方法 init
8.如果存在类实现 BeanPostProcessor(处理Bean) ,执行postProcessAfterInitialization
执行业务处理
9.如果Bean实现 DisposableBean 执行 destroy
10.调用<bean destroy-method="customerDestroy"> 指定销毁方法 customerDestroy

5.如果存在类实现 BeanPostProcessor(后处理Bean) ,执行postProcessBeforeInitialization

这个演示需要新建一个类
不理解没关系,先照着写

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
它到底要处理bean的什么东西呢
在这里插入图片描述
在这里插入图片描述
这是因为我们现在写的没有返回值,肯定跟这个返回值有关系
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
预处理和后处理有啥用呢?
在这里插入图片描述

6.如果Bean实现InitializingBean 执行 afterPropertiesSet

在这里插入图片描述
在这里插入图片描述

7.调用 指定初始化方法 init

意思就是客户自己定义一个初始化的方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.如果存在类实现 BeanPostProcessor(处理Bean) ,执行postProcessAfterInitialization执行业务处理

在这里插入图片描述
5和8非常相似,在前面一起处理了

9.如果Bean实现 DisposableBean 执行 destroy

在这里插入图片描述
在这里插入图片描述
跟前面的操作类似,必须去重写这个接口里面的必要的方法
在这里插入图片描述
意思就是不用的时候就把bean给移除掉
在这里插入图片描述
为什么没有被打印呢?因为这里我们要自己调用一个方法在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

再运行就会关闭了
在这里插入图片描述
在这里插入图片描述

10.调用 指定销毁方法 customerDestroy

在这里插入图片描述
有自定义的初始化方法,那么对应也就有自定义的销毁方法
在这里插入图片描述
在这里插入图片描述
配置好之后它就会去调用
在这里插入图片描述
意思就是我们这个对象如果销毁的时候需要做一些什么事情,我们可以在这里来做
一般我们在对象销毁的时候会做一些资源释放

总结

1、注意初始化和实例化的区别,它们可不是一个概念
实例化一般是由类创建的对象,在构造一个实例的时候需要在内存中开辟空间,即 Student s = new Student();
初始化 实例化的基础上,并且对 对象中的值进行赋一下初始值

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值