spring注入bean的三种方式,spring如何注入bean,有哪几种方法-

  spring注入bean的三种方式,spring如何注入bean,有哪几种方法?

  

  首先需要知道一个大致实现

  该注入过程必须在BeanPostProcessor中实现。

  spring实例化beanFactory.getBean中的bean,即懒加载。

  根据第二条,也就是说获取bean时会调用所有getBeanpostprocessors。

  第二篇文章说BeanFactory的刷新过程只是注册BeanPostProcessor,实际上是在getBean方法中执行的。

  (推荐视频:java视频教程

  MerbeandefinitionPostprocessor也是一个BeanPostProcessor。它会重新创建一个生命周期函数,替换BeanPostProcessor的默认生命周期函数。让我们这样来看。我贴一个简短的源代码。

  for(BeanPostProcessor BP:getBeanPostProcessors()){

  if(mergedbeanditionpostprocessor的bp实例){

  mergedbeanditionpostprocessor BDP=(mergedbeanditionpostprocessor)BP;

  BDP . postprocessmergedbean definition(mbd,beanType,bean name);

  }

  }它允许您在非BeanFactoryProcess中修改Bean定义。

  InstantiationAware PostProcessor也是一个BeanPostProcessor。它还重新定义了一个生命周期函数,允许将属性值注入到属性对象中。

  @Autowired 加载定义的过程

  不看bean的创建过程,先看MergedBeandefinitionPostProcessor的实现子类。在这里,我们来看看名字的猜测。

  Autowireannotationbeanpost处理器应该是这样做的,所以我们接下来可以直接看它。

  autowireannationbeanpostprocessor的postprocessmergedbean definition方法的代码。

  通过调用该方法,我们可以知道buildAutowiringMetadata是真正查找这些注释的地方。最后,checkConfigMember将成员注册到bean定义中,查找详细信息的读者可以自行检查源代码。

  这里,在bean定义中只注册了成员,它实际上是在填充Bean的过程中被实例化的。当bean被创建时,我们可以知道它何时被注入。

  Bean 的创建过程

  如前所述,spring在获取bean的过程中创建bean,创建bean分为几个步骤。

  1.获取bean定义

  2.新Bean()

  3.执行生命周期功能(前端)

  4.创建依赖关系

  5.填充豆

  6.执行生命周期功能(之后)

  条目是BeanFactory.getBean,BeanFactory的实现类是DefaultListableBeanFactory。你可以在BeanFactory的刷新过程中找到这些。

  根据源代码,如果bean尚不存在,将执行bean创建过程。

  Get bean是在这个源代码中定义的。

  final rootbean definition mbd=getMergedLocalBeanDefinition(bean name);然后,根据bean定义,搜索它的依赖项,并创建Bean。可以看到,bean是递归创建的。

  string[]depends on=mbd . getdepends on();

  for (String dep : dependsOn) {

  get bean(dep);

  }然后创建bean。

  if (mbd.isSingleton()) {

  createBean(beanName,mbd,args);

  }

  //真正的执行在doCreateBean进程中

  object bean instance=docreate bean(bean name,mbdToUse,args);bean创建的第一步,新Bean

  if (instanceWrapper==null) {

  instance wrapper=createbean instance(bean name,mbd,args);

  }创建bean的第二步是执行所有的处理器,包括MergedBeandefinitionPostprocessor,所以在这一步注册注入选项。

  applymergedbeanditionpostprocessors(mbd,beanType,bean name);创建bean的第三步,填充bean,这里是@Autowired注入。

  populateBean(beanName,mbd,instance wrapper);的最终处理在autowireannationbeanpostprocessor的postProcessPropertyValues函数中进行。

  metadata.inject(bean,beanName,PVS);因为之前已经获取了依赖关系,并扔进了容器,所以这里直接用反射写就可以了。

  创建bean的第四步是初始化bean。这里有一个方法注入,最初发生在bean初始化的过程中,执行生命周期函数,包括BeanPostProcessor的前后生命周期,初始化方法等。

  注意:autowiredannotationbeanpostprocessor既是mergedbeandefinitionpostprocessor,也是instantiawarebeanpostprocessor

  本文来自我们,java教程专栏,欢迎学习!以上是spring如何注入对象的细节和bean创建过程的分析。请多关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: