当前位置: 首页 > 网络应用技术

春豆的初始化

时间:2023-03-08 22:29:16 网络应用技术

  没什么可说的,首先给出结论。本文只讨论了该类别的执行关系。

  Bean的特定实例化过程太复杂了,对理解建议感兴趣,请参阅“深度分析中的春季源代码”一书。

  示例代码删除日志,有些与分析无关

  由于代码太多,因此只挑选了关键代码。如果您有兴趣,可以根据文章调试来理解该过程。

  然后输入

  输入getingleton()方法后,我发现里面有一些准备。真正的电话是lambda表达

  输入lambda表达

  受保护的对象initializeBean(strim beanname,对象bean,@nullable rootbeandefinition mbd){

  if(system.getSecurityManager()!= null){

  AccessController.doprivileged(privilegedAction) - > {{{

  InvokeAwareMethods(beanname,bean);

  返回null;

  },getAccessControlContext());

  }

  别的 {

  //处理意识接口,设置beanname或工厂

  InvokeAwareMethods(beanname,bean);

  }

  对象包裹= bean;

  if(mbd == null ||!mbd.issynthetic(){){){){){){){){){){){){){){){){){){)

  //位置9

  包裹bean = applyBeanPostProcessorsBeforinItialization(包装Bean,beanname);

  }

  尝试 {

  InvoKeinitMethods(BeanName,包装Bean,MBD);

  }

  捕获(可投掷EX){

  扔新的beanCreationException(

  (mbd!= null?mbd.getResourcedEscript():null),null),

  BeanName,“ Init方法的调用失败”,例如);

  }

  if(mbd == null ||!mbd.issynthetic(){){){){){){){){){){){){){){){){){){)

  //第10号

  包裹= applyBeanPostProcessorSafterInilition(包装Bean,BeanName);

  }

  返回包装;

  }

  //春季初始化扩展方法

  受保护的void InvoKeinitMethods(弦豆名称,对象bean,@nullable rootbeandefinition MBD)

  抛出可投掷{

  boolean isInitializeBean =(bean instance of InitializatizBean);

  if(isInitializingBean &&(mbd == null ||!mbd.isexternallyManagedInitMethod(“ afterPropertiestEst”){){){){){){){){){){

  if(loger.istraceNabled()){{{

  logger.trace(“在bean上使用名称'“ + beanname +”''“”的bean上的afterPropertiest();

  }

  if(system.getSecurityManager()!= null){

  尝试 {

  AccessController.doprivileged(privilegedExceptionActionAction) - > {{{

  (初始化bean).fterPropertiesset();

  返回null;

  },getAccessControlContext());

  }

  catch(priviledactionAction exception pae){

  扔pae.getException();

  }

  }

  别的 {

  (初始化bean).fterPropertiesset();

  }

  }

  if(mbd!= null && bean.getClass()!= nullbean.class){

  字符串initmarthodname = mbd.getInitmethodname();

  if(stringutils.haslength(initmethodname)&& &&

  呢(isInitializingBean &&“ afterPropertiesset” .equals(initmarthodname)&& && &&华氏

  mbd.isexternallyManaticDintified(IntuiellyName)){{{

  InvokeCustomInitMethod(BeanName,Bean,MBD);

  }

  }

  }