spring为实现Aware接口的自动设置相关属性的操作

本文详细介绍了Spring框架中Bean的初始化过程,包括调用各种Aware接口的方法,如BeanNameAware、BeanClassLoaderAware等,以及通过BeanPostProcessor进一步定制Bean的初始化逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AbstractApplicationContext.refresh->finishBeanFactoryInitialization->beanFactory.preInstantiateSingletons()->getBean->doGetBean->getSingleton->singletonFactory.getObject()->createBean->doCreateBean->initializeBean




1. initializeBean的时候调用invokeAwareMethods(beanName, bean);(org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(String, Object, RootBeanDefinition)) 
这时会: 
1.1 调用BeanNameAware的setBeanName(beanName)方法 
1.2 调用BeanClassLoaderAwarere的setBeanClassLoader(getBeanClassLoader())方法 
1.3 调用BeanFactoryAware的setBeanFactory(AbstractAutowireCapableBeanFactory(AbstractAutowireCapableBeanFactory.this)方法 

2 initializeBean的时候调用applyBeanPostProcessorsBeforeInitialization(wrappedBean, beanName),获取BeanPostProcessors,然后遍历调用每个posetProcessor的postProcessBeforeInitialization方法;org.springframework.context.support.ApplicationContextAwareProcessor的postProcessBeforeInitialization(Object, String)方法会执行invokeAwareInterfaces(bean) 
这时会: 
2.1 调用EnvironmentAware的setEnvironment(this.applicationContext.getEnvironment())方法 
2.2 调用EmbeddedValueResolverAware的setEmbeddedValueResolver(new EmbeddedValueResolver(this.applicationContext.getBeanFactory())方法 
2.3 调用ResourceLoaderAware的setResourceLoader(this.applicationContext)方法 
2.4 调用ApplicationEventPublisherAware的setApplicationEventPublisher(this.applicationContext)方法 
2.5 调用MessageSourceAware的setMessageSource(this.applicationContext)方法 
2.6 调用ApplicationContextAware的setApplicationContext(this.applicationContext)方法 
org.springframework.web.context.support.ServletContextAwareProcessor的postProcessBeforeInitialization(Object, String)中会完成: 
2.7 调用ServletContextAware的setServletContext(getServletContext())方法 
2.8 调用ServletConfigAware的setServletConfig(getServletConfig())方法


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值