当前位置:网站首页 > R语言数据分析 > 正文

swagger2常用注解(@enableswagger2注解)



  1. 容器基本用法
    测试类

XML文件

测试代码

  1. 源码学习

直接进入getBean方法,定义在BeanFactory接口中,有很多重载,看AbstractBeanFactory中的实现:

调用了doGetBean方法,doGetBean的代码量很大,逻辑也相对复杂:

这段代码存在循环依赖的检测以及多处bean的缓存,首先从singletonObjects中获取,获取不到且当前单例正在创建中则从earlySingletonObjects中获取,如果还是获取不到且allowEarlyReference,则尝试获取ObjectFactory,调用其getObject方法。最后无论是否获取到都返回。回到doGetBean方法,如果获取到单例且传入的args为null,则直接调用getObjectForBeanInstance方法:

这段代码主要是对name不是以&为前缀且beanInstance是FactoryBean的实例进行处理,而这个逻辑主要由FactoryBeanRegistrySupport类的getObjectFromFactoryBean方法处理:

上面的代码主要是一些逻辑的处理,但是没有真正的获取bean,保证了单例的全局唯一性,以及非单例模式的创建。接下来进入doGetObjectFromFactoryBean方法:

//这个代码的逻辑比较简单,首先是判断需不需要权限,不论是否需要权限都会调factoryBean的getObject()方法,最后是对返回值为null的情况做处理,最后返回object。接下来回到getObjectFromFactoryBean方法,可以看到除了逻辑处理之外,对于单例和非单例的创建都调用了postProcessObjectFromFactoryBean方法:

这里的实现是直接返回object,但是在其子类AbstractAutowireCapableBeanFactory有对postProcessObjectFromFactoryBean的重写:

从代码来看就是对结果的处理,后处理器目前并没有接触或者使用,以后了解了再补充。接下来根据return一步一步返回上一层,回到getObjectFromFactoryBean方法,不论是哪种情况,都会在调用了postProcessObjectFromFactoryBean后进行返回。回到getObjectForBeanInstance方法,其实是根据传入的beanName和实例是否是FactoryBean类型的实例对实例进行处理。再回到doGetBean方法,接下来就是对sharedInstance为null或者args不为null两种情况的处理。跳过parentBeanFactory中获取bean的过程,直接看后面的程序,如果不仅仅是做类型检查的话,需要调用markBeanAsCreated方法对缓存进行维护:

首先isDependent以及registerDependentBean方法主要是对循环依赖的维护以及检测。for循环中主要是获取依赖的bean,主要还是调用getBean方法。将所有的依赖bean都创建完成之后才会开始当前bean的创建。首先是单例模式的创建:

直接看prepareMethodOverrides方法,在AbstractBeanDefinition类中实现:

先进入createBeanInstance方法:

autowireConstructor方法代码量非常大,但是总体来说做了两件事,确定构造函数,调用实例化策略的instantiateBean方法创建实例并加入到BeanWrapper中。而instantiateBean同样也是调用了实例化策略的instantiateBean方法:

首先看实例化策略,也就是getInstantiationStrategy方法,在AbstractAutowireCapableBeanFactory类中:

显而意见,如果用户不去设置,则默认的就是CglibSubclassingInstantiationStrategy类的实例,而CglibSubclassingInstantiationStrategy则是SimpleInstantiationStrategy类的子类,instantiate也是在SimpleInstantiationStrategy类中实现的:

反射的具体过程这里就不看了,直接进入CglibSubclassingInstantiationStrategy类重写的instantiateWithMethodInjection方法:

终于完成了实例的创建,可以返回doCreateBean函数了。当bean创建完毕之后,需要进行属性填充以及调用初始化方法,当然也可能没有,初始化方法中也存在一些其他逻辑,最后则是收尾工作,检测依赖以及注册需要销毁的bean,就不再进入代码详细分析了。doCreateBean方法结束后其实一直返回会发现关于bean的创建基本上已经结束了,其他的逻辑比较简单。至此关于bean的创建告一段落。

如果有不正确的地方欢迎指正。

到此这篇swagger2常用注解(@enableswagger2注解)的文章就介绍到这了,更多相关内容请继续浏览下面的相关 推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • strip工具(srtr工具箱)2025-04-22 14:54:07
  • cruise是干嘛的(cruise是什么意思英语)2025-04-22 14:54:07
  • rise是什么意思(sell是什么意思)2025-04-22 14:54:07
  • rpro怎么读(roper怎么读)2025-04-22 14:54:07
  • tornami a vagheggiar翻译(tornadoes翻译)2025-04-22 14:54:07
  • spring wang(spring 网关的作用)2025-04-22 14:54:07
  • hrnetone(hrnetone可靠吗)2025-04-22 14:54:07
  • strict用法归纳(strict的句型)2025-04-22 14:54:07
  • cruise软件在汽车行业用的多吗知乎(cruise软件在汽车行业用的多吗知乎)2025-04-22 14:54:07
  • nowcoder笔试会识别分屏吗(nowcoder面试是啥意思)2025-04-22 14:54:07
  • 全屏图片