spring bean生命周期之——修改beanDefinition

修改类:
在这里插入图片描述
测试类:
在这里插入图片描述

1、实现BeanFactoryPostProcess接口,重写postProcessBeanFactory方法,此时方法入参即可拿到spring的beanFactory
2、根据bean工厂,获取bendDefinition
3、修改beanDefinition
4、测试,此时执行代码会发现报错,原因是找不到beanName为car的bean对象。因为在修改beanDefinition中已经修改了。

补充一下Bean的生命周期:
Bean的加载过程(生命周期):
1、加载BeanDefinition配置元信息:通过各种BeanDefinitionReader(如:XmlBeanDefinitionReader,PropertiesBeanDefinitionReader等)读取配置文件,再通过BeanDefinitionScanner去进行筛选需要创建bean的类或者xml,之后通过BeanDefinitionRegistry转换成内存形式的BeanDefinition,放在一个map中 ;
2、可以通过后置增强器BeanFactoryPostProcessor修改BeanDefinition中数据
3、将BeanDefinition加载至BeanFactory中(简单工厂模式),通过getBean();方法进行创建bean
4、推断构造器,进行实例化对象(即:在堆中开辟一块内存空间,并给属性值设置默认值)
5、填充属性,包括依赖注入
6、回调执行Aware接口需要实现的方法,想要设置什么bean对象在spring ioc容易中的属性名,就在对应类上实现什么类型接口,比如:BeanNameAware,修改 beanName
7、执行初始化前置操作,增强器,BeanPostProcessor:before,实际是在对应类中,执行加上了@PostConstruct注解的方法
8、检查类是否实现InitializingBean以决定是否调用afterPropertiesSet方法(类实现接口:initializingBean,重写方法:afterPropertiesSet)
9、检查类是否配置有自定义的init-method方法,执行初始化方法,init-method方法
10、执行初始化后置操作,BeanPostProcessor:after
11、创建完整bean,如果作用域是单例,还会将该bean放入单例池,即:一个ConcurretnHashMap类型的Map<beanName,bean对象> map,其他地方使用,直接先查,不存在的情况下才会创建bean对象(三级缓存了解下)
12、使用
13、销毁bean对象:调用disposableBean中destory方法

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值