spring BeanPostProcessor使用场景
AnnotationConfigApplicationContext(创建容器)
->refresh->finishBeanFactoryInitialization->preInstantiateSingletons->getBean->doGetBean->createBean->doCreateBean-> this.populateBean(beanName, mbd, instanceWrapper);(类属性赋值)this.initializeBean(beanName, exposedObject, mbd);(BeanPostProcessor postProcessBeforeInstantiation和postProcessAfterInstantiation执行)
一、populateBean方法内容以Autowired注解和AutowiredAnnotationBeanPostProcessor为例
populateBean 类属性赋值
这种类型的InstantiationAwareBeanPostProcessor类负责给属性赋值
以AutowiredAnnotationBeanPostProcessor为例,@Autowired注解为属性赋值。执行 postProcessPropertyValues ->findAutowiringMetadata ->buildAutowiringMetadata ->findAutowiredAnnotation 获取bean属性上中有@Autowired注解的属性放入InjectionMetadata->InjectionMetadata.InjectedElement.inject 利用反射赋值
如果为InstantiationAwareBeanPostProcessor类型的类,则执行该类的postProcessPropertyValues方法。AutowiredAnnotationBeanPostProcessor继承了InstantiationAwareBeanPostProcessor
还执行了实现了接口InstantiationAwareBeanPostProcessor的类的
postProcessAfterInstantiation方法。
二、initializeBean方法
1、执行invokeAwareMethods实现了BeanNameAware、BeanClassLoaderAware、BeanFactoryAware接口的setXXX方法。
2、循环调用实现了接口BeanPostProcessor的postProcessBeforeInitialization方法。常用的ApplicationContextAware.java就是这种执行,它是在AbstractApplicationContext.java中refresh的prepareBeanFactory方法中添加。
3、invokeInitMethods
执行init-method、postConstract注解的方法、afterPropertiesSet
4、循环遍历实现BeanPostProcessor接口的applyBeanPostProcessorsAfterInitialization方法。
spring BeanPostProcessor使用场景相关推荐
- 《Spring技术内幕》——1.4节Spring的应用场景
1.4 Spring的应用场景 通过介绍Spring架构设计,我们了解到Spring是一个轻量级的框架.在Spring这个一站式的应用平台或框架中,其中的各个模块除了依赖IoC容器和AOP之外,相互之 ...
- beanpostprocessor使用场景_Spring因动态代理使用不注意导致的诡异现象
关注"Java艺术"一起来充电吧! 笔者在新的定时任务项目中,限定一个类只能写一个Job,类似于写脚本,一个Job一个脚本.对于简单的任务我们并不约定一定要有Service层,但在 ...
- Spring boot的场景启动器
场景启动器 Spring boot将所有的功能场景,抽取出来 做成一个个独立的starters启动器 只有在项目里面,引入了starters 这些场景的所有依赖,都会导出到工程中 需要什么样的功能,引 ...
- spring BeanPostProcessor,BeanFactoryPostProcessor作用
一.BeanPostProcessor 主要用来对已经实例化的BEAN进行再次处理和修改,返回新定义的对象. 1.例如当CONTROLLER使用@RESOURCE注入SERVICE对象时,SPRING ...
- Spring BeanPostProcessor接口详细使用
BeanPostProcessor接口简介 BeanPostProcessor也称为Bean后置处理器,它是Spring中定义的接口,在Spring容器的创建过程中(具体为Bean初始化前后)会回调B ...
- Spring事务使用场景
常规调用 @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) methodA{--try ...
- spring aop应用场景
场景一: 记录日志 场景二: 监控方法运行时间 (监控性能) 场景三: 权限控制 场景四: 缓存优化 (第一次调用查询数据库,将查询结果放入内存对象, 第二次调用, 直接从内存对象返回,不需要查询数据 ...
- spring prototype 使用场景
在 Spring IoC 容器中具有以下几种作用域: singleton:单例模式,在整个Spring IoC容器中,使用singleton定义的Bean将只有一个实例,适用于无状态bean: pro ...
- Spring事务失效场景
1.Spring事务最终依赖的数据库的事务,如果用的是mysql的话,执行引擎要是innodb;因为只有innoDB 支持事务. 2.Spring的事务是原理是aop,所以加事务所在bean是要Spr ...
- 再述Spring AOP 应用场景
AOP 是OOP 的延续,是Aspect Oriented Programming 的缩写,意思是面向切面编程.可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种 ...
最新文章
- “外星人”字符串生成算法研究
- python定时器 是线程吗_python线程定时器Timer(32)
- JavaScript对象的创建之动态原型方式
- C++/Cli中事件对象处理函数的添加与删除
- PMP读书笔记(第4章)
- Oracle数据库Date类型查询问题(
- centos7 通过kvm+vnc 实现远程桌面虚拟化和创建windows、Linux虚拟机
- bcp out 带列名导出_从零开始学习 MySQL 系列索引、视图、导入和导出
- windows10中屏幕键盘 vs 触摸键盘
- POJ-1861-Network 解题报告
- java中字符串的算法_Java中的字符串搜索算法
- ios 自己创建的动态frameworks 怎么发布_苹果 iOS 14 修复 2 年来的一个bug 果粉炸锅:原来不是自己手残...
- 怎样对待一个延期的项目
- SQL Server 数据库维护脚本合集[007]-删除数据库所有用户表数据
- 计算机二级office基础知识题库,计算机office二级考试题库
- cmd的常用命令分类详解
- 四大名著红楼梦第一回 甄士隐梦幻识通灵 贾雨村风尘怀闺秀
- 针对车载系统相关的功能分析(车载OS、芯片、导航、DC、总线系统等)
- Apollo + Springboot 整合(多环境版)
- 不惧新冠疫情 DDN公司销售收入逆势增长
热门文章
- html 简单表格制作(看了它足以应对大部分表格)
- 直通串口线和交叉串口线
- windows10为何鼠标右键一点桌面就一直转圈?
- 三大主流负载均衡器LVS、Nginx、HAproxy详解
- 大龄程序员的8种出路
- 分段线性插值法实验报告_试验二 插值法(含实验报告式)格式).doc
- 【虹科科普】信号发生器分类及任意波形发生器原理
- 电脑仙人掌机器人作文_用蜗牛.仙人掌.电脑.雪人.机器人.蚕宝宝.大象任意选两个编写一则300童话...
- CCF推荐会议(人工智能与模式识别)
- linux 查找py文件命令_Linux文件查找