96SEO 2026-02-19 06:52 0
妙的设计例如Bean工厂设计、Bean的生命周期、tx、aop、web、mvc等最核心基本的Bean设计是Spring

的框架的灵魂本文就Bean的生命周期全流程做源码程度上的解析欢迎各位大佬指点江山。
先上一张DefaultListableBeanFactory的UML图来来感受Spring
框架设计的强大跟着DefaultListableBeanFactory去揭开Spring框架的核心面纱。
DefaultListableBeanFactory掌管了Bean生命周期的大权Bean的创建、初始化、销毁添加BeanPostProcessor等功能可以说是Spring框架最全的Bean工厂,
我们可以使用DefaultListableBeanFactory
createBeanByDefaultListableBeanFactory(final
DefaultListableBeanFactory();RootBeanDefinition
RootBeanDefinition(beanClass);beanDefinition.setInitMethodName(testMethod);beanDefinition.setDestroyMethodName(testDestroy);beanFactory.registerBeanDefinition(testBean,
beanDefinition);//添加BeanPostProcessorbeanFactory.addBeanPostProcessor(new
postProcessBeforeInitialization(Object
{//System.out.println(执行前..);return
postProcessAfterInitialization(Object
{System.out.println(执行后..);return
testMethod(){System.out.println(初始化..);}public
testDestroy(){System.out.println(销毁..);}}Testpublic
testDefaultListableBeanFactory()
User.class;DefaultListableBeanFactory
createBeanByDefaultListableBeanFactory(beanClass);User
User.class);System.out.println(user
postProcessBeforeIntialization()
init-method()postProcessAfterInitialization()
为了进一步理解Bean的生命周期下面我们继续看Aware、BeanPostProcessor、InitialzingBean接口的执行顺序。
BeanNameAware、BeanFactoryAware、BeanClassLoaderAware
BeanNameAware、BeanFactoryAware、BeanClassLoaderAware接口分别是在初始化Bean之前调用的我们可以利用BeanName、BeanFactory、ClassLoader去开发一些业务。
执行BeanNameAware、BeanClassLoaderAware、BeanFactoryAware的接口。
*
bean).setBeanName(beanName);}if
bean).setBeanClassLoader(bcl);}}if
bean).setBeanFactory(AbstractAutowireCapableBeanFactory.this);}}}
BeanPostProcessor接口里有2个默认方法分别为PostProcessBeforeInitialization和PostProcessAfterInitialization。
org.springframework.beans.BeansException
org.springframework.beans.factory.InitializingBean#afterPropertiesSet*/Nullabledefault
postProcessBeforeInitialization(Object
InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation}
org.springframework.beans.BeansException
org.springframework.beans.factory.InitializingBean#afterPropertiesSet*
org.springframework.beans.factory.FactoryBean*/Nullabledefault
postProcessAfterInitialization(Object
当所有的Bean属性被BeanFactory设置完后允许你用afterPropertieSet()方法做一次调。
org.springframework.beans.factory.support.RootBeanDefinition#getInitMethodName*
org.springframework.context.ApplicationContextAware*/
该接口一般可以用来做属性实例的校验比如当前Bean依赖了哪些Bean,
如果依赖的Bean没有初始化就应该抛出异常例如DataSourceTransactionManager里用该方法去校验DataSource有没有被初始化。
AbstractPlatformTransactionManagerimplements
{setNestedTransactionAllowed(true);}/***
DataSourceTransactionManager(DataSource
{this();setDataSource(dataSource);afterPropertiesSet();}Overridepublic
IllegalArgumentException(Property
required);}}}InitializingBean接口的afterPropertiesSet()在AbstractAutowireCapableBeanFactoryinvokeInitMethods方法里被调用。
执行InitializingBean的afterPropertiesSet()if
!mbd.isExternallyManagedInitMethod(afterPropertiesSet)))
{AccessController.doPrivileged((PrivilegedExceptionActionObject)
bean).afterPropertiesSet();return
getAccessControlContext());}catch
执行InitialingBean的afterProperties()接口。
((InitializingBean)
bean).afterPropertiesSet();}}if
(StringUtils.hasLength(initMethodName)
afterPropertiesSet.equals(initMethodName))
!mbd.isExternallyManagedInitMethod(initMethodName))
{invokeCustomInitMethod(beanName,
三、DefaultListableBeanFactory的父类AbstractAutowireCapableBeanFactory
AbstarctAutowireCapableBeanFactory
是一个抽象类实现了AutowireCapableBeanFactory和AbstarctBeanFactory接口initializeBean方法实现了实例化Bean的整个流程。
{AccessController.doPrivileged((PrivilegedActionObject)
getAccessControlContext());}else
执行所有的BeanNameAware、BeanClassLoaderAware、BeanFactoryAware接口把对象塞入到参数里交给开发者使用。
invokeAwareMethods(beanName,
执行所有的BeanPostProcessor里的postProcessBeforeInitialization()Object
applyBeanPostProcessorsBeforeInitialization(wrappedBean,
其中包含InitializingBean接口里的AfterPropertiesSet()方法和自定义的init()方法invokeInitMethods(beanName,
执行所有的BeanPostProcessor的postProcessAfterInitialization()方法if
applyBeanPostProcessorsAfterInitialization(wrappedBean,
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback