探究Springboot源码中的设计模式(一)

       设计模式和Spring的源码是每个java程序员都会研究的两个主题。在这里我抛砖引玉,和大家一起探讨下Springboot源码中的设计模式。

      让我们从耳熟能详的単例模式开始。大家都知道我们常用的MVC框架中,由Springboot产生的业务bean都是単例的,那Springboot框架是怎么实现的呢?

      我们从一个简单的controller开始,

       

       通过@RestController注解我们知道它是由Springboot管理的,ClassPathBeanDefinitionScanner会去扫描类路径下标注了特定注解的类,然后把它们注册到给定的类工厂或者程序上下文中。

        

      启动程序的时候,给定的类工厂是DefaultListableBeanFactory,调用这个类中的preInstantiateSingletons()方法。

       

 

       我们的主角出现了,继续看它是怎么被创建的,getMergedLocalBeanDefinition()返回了一个RootBeanDefinition的实例,在这实例中定义了要创建的Controller实例是不是単例的。在getMergedLocalBeanDefinition()方法中调用了父类AbstractBeanFactory的getMergedBeanDefinition()方法,在个方法里有这样一段代码

       

       在没有定义范围的时候,设定了BeanDefinition的实例scope属性为singleton。

       然后在preInstantiateSingletons()方法中调getBean()去获取name为swadeController的bean,getBean()方法调父类AbstractBeanFactory的doGetBean()方法,在doGetBean()方法中

       

 

       如果它是単例的就去创建实例,首先在AbstractBeanDefinition的getBeanClass()中获取了类的class

       

       再通过类加载器获取他的默认构造方法,然后创建实例返回。至此我们就得到了SwadeContoller的単例。  

       单例模式在Springboot的中实现过程是比较复杂的,总结一下就是在Springboot管理了注册在它上下文中的bean,在BeanDifinition中定义了类创建的范围,单例模式的scope就是Singleton。

       単例模式实现了,那Springboot为什么要用単例模式来创建我们的业务层实例呢?

       1.在程序中这些类是被频繁使用的,让它们保持在内存中,避免了频繁创建、销毁的性能损耗(当然除了业务类,日志类,配置类等都是单例的)。

      2.内存中只有一个实例,这样请求过来就会快速的找到有且仅有的一个,节省内存、避免对资源的多重占用和便于管理。

      以上是我对Springboot单例模式的见解。欢迎大家在评论里留下自己的见解,让我们一起讨论,一起进步。

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Spring Boot 是一个基于 Spring 框架的开发框架,它简化了 Spring 应用程序的搭建和部署过程。Spring Boot 的底层源码主要包括 Spring Framework 和一些相关的第三方库。 Spring Framework 是 Spring Boot 的核心,它提供了一系列的模块,包括依赖注入、AOP、事务管理、Web 开发等功能。Spring Framework 的源码主要包括核心容器、Web 模块、数据访问模块等。 在探究 Spring Boot 底层源码时,可以从以下几个方面入手: 1. Spring Boot Starter:Spring Boot Starter 是 Spring Boot 的核心特性之一,它是一组预定义的依赖库集合,用于简化应用程序的配置和启动。可以通过查看 Starter 模块的源码了解 Spring Boot 启动过程的自动配置和自动装配原理。 2. SpringApplication:SpringApplication 是 Spring Boot 启动类的入口,它负责初始化 Spring 应用上下文,并根据配置自动装配所需的组件。可以通过查看 SpringApplication 的源码了解 Spring Boot 启动过程的各种配置加载、环境变量解析等细节。 3. 自动配置:Spring Boot 提供了自动配置的功能,根据项目所引入的依赖自动配置相应的组件。可以通过查看自动配置类的源码了解 Spring Boot 自动配置的原理和实现方式。 4. 配置属性绑定:Spring Boot 使用 @ConfigurationProperties 注解来绑定配置属性,可以通过查看该注解的源码了解属性绑定的原理。 5. Web 开发:Spring Boot 对 Web 开发提供了很好的支持,可以通过查看 Spring Boot Web 模块的源码了解如何使用 Spring Boot 开发 Web 应用,并了解其的原理和实现方式。 以上是一些可以探究 Spring Boot 底层源码的方面,通过深入研究这些源码,可以更好地理解 Spring Boot 的工作原理,从而更好地使用和调优 Spring Boot 应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值