热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

spring源码学习(1)bean包中主要接口部分的简单介绍

spring源码学习(1)-bean包中主要接口部分的简单介绍,Go语言社区,Golang程序员人脉社

目录




  • 目录
  • 前言
  • 学习源码的入手一些想法
  • 主要接口列举
  • bean加载大体流程
  • DefaultListableBeanFactory类图
  • DefaultListableBeanFactory简单介绍
  • 总结



前言

总想尝试着学习点spring源码,学习学习好的编程方式、编程思想等。可是实在是不知道如何下手,毕竟源码里面有那么多的Java文件,该看什么从哪里看一直困扰我。每次研究完绕了一圈,又不知道自己是从哪里开始哪里结束的,那感觉真的就像是走迷宫,走着走着不知道起点,走着走着又回到了起点。
这边文章,应该是学习笔记吧,把我的学习方法和思路记录下。


学习源码的入手一些想法

Java是个面向对象的语言,我想多多少少都接触过设计模式,应该知道设计模式的六大原则。spring这么牛逼的框架,里面的编程想法也应该大部分是符合这六大原则。六大原则中,有个是依赖倒转原则,简单内容就是“针对接口编程,依赖于抽象而不依赖于具体”,大概的意思是:我定义好了接口,知道了每个接口做什么,具体的实现我不管,每次用的时候我都依赖于我需要的接口进行调用具体我调用了哪个实现类我不用在意这么多。
所以我想,如果在看源码的时候,能够把握好spring定义的接口以及作用,就好比在迷宫中,你有了一张“地图”,在被spring的各种类间调用的不知道你在何处的时候,看看这张“地图”,可以快速的定位到你的位置,知道此刻的位置在做什么以及他的作用在何处。下面我们看看bean包中的几个比较重要的接口。


主要接口列举
  • BeanFactory 定义了获取bean以及bean的各种属性
  • HierarchicalBeanFactory 增加了对父类ParentBeanFactory的定义
  • ConfigurableBeanFactory 定义了各种beanfactory的配置操作
  • AutowireCapableBeanFactory 定义了自动注入、初始化、以及bean的后置处理
  • ListableBeanFactory 根据条件获取bean的相关配置信息
  • ConfigurableListableBeanFactory beanfactory的配置清单,并且定义了忽略类型以及接口
  • BeanDefinition 定义了bean的各种属性和操作
  • AliasRegistry定义了对别名(alias)的注册,删除,判断,获取
  • SingletonBeanRegistry 定义了对单例的注册和获取
  • BeanDefinitionRegistry定义了对BeanDefinition的操作
  • FactoryBean定义了bean对象的获取,以及是否单例的判断

看上面的这几个接口,是不是感觉好像是把大部分spring对bean的操作配置什么的都包括,又感觉好乱…没了章法,好像知道你干嘛的又说不上来你干嘛的。接下来我们结合下bean加载的流程。


bean加载大体流程

这里写图片描述

这个流程特别的粗糙,不过bean的加载流程大致也是这样的,从获取配置文件(我们常见的xml或者注释),然后解析这个配置文件,接着是把配置内容加载到类实例中,最后把这个类实例注册到spring的容器中。这个容器其实简单的理解就是K-V。
我们把上面的流程对应的接口再抽取出来就是:
- BeanFactory 定义了获取bean以及bean的各种属性
- BeanDefinition 定义了bean的各种属性和操作
- BeanDefinitionRegistry定义了对BeanDefinition的操作
BeanFactory 暂时不用关注,因为这个是bean的获取的流程中使用。
BeanDefinition定义了bean的各种属性和操作。就是流程图中的类实例对应的那个类接口
BeanDefinitionRegistry 就是把bean加载到容器中定义的接口。
其他的接口,我想用过spring的童鞋多多少少知道他们的作用,就不多说了。
说到这,我想已经多少了解了点bean加载的过程和用到的主要的接口,那么对于这些接口的使用、结合、操作实现等等的使用,我想肯定要说的就是DefaultListableBeanFactory。我先把这个类的类图画出来。


DefaultListableBeanFactory类图

这里写图片描述
我把每个接口,类的具体作用简单的标注了下。


DefaultListableBeanFactory简单介绍

突然冒出DefaultListableBeanFactory这个类图介绍,显得有点突兀,不过仔细看一下DefaultListableBeanFactory这个类图,也许就知道为什么是用这个类图。DefaultListableBeanFactory类是spring的bean包中非常重要的一个类,通过类图其实也可以看出来,他把之前说到的几个重要的bean包中的接口,通过继承实现的方式具体实现。
所以通过DefaultListableBeanFactory就可以把bean加载到spring的容器中。这个类的具体实现过程以后有机会再说。


总结

这个是我写的第一篇的博客,内容讲的挺泛,少了点针对性。只是简单了介绍了下学习spring源码的一个思路吧。如果有时间有机会,把我自己学习的一些想法,一些觉得该记录下来的东西写写,以后复习时候更好理解和记忆。




推荐阅读
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 本文详细介绍了如何使用Spring Boot进行高效开发,涵盖了配置、实例化容器以及核心注解的使用方法。 ... [详细]
  • 实体映射最强工具类:MapStruct真香 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 图数据库中的知识表示与推理机制
    本文探讨了图数据库及其技术生态系统在知识表示和推理问题上的应用。通过理解图数据结构,尤其是属性图的特性,可以为复杂的数据关系提供高效且优雅的解决方案。我们将详细介绍属性图的基本概念、对象建模、概念建模以及自动推理的过程,并结合实际代码示例进行说明。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 本文探讨了 Spring Boot 应用程序在不同配置下支持的最大并发连接数,重点分析了内置服务器(如 Tomcat、Jetty 和 Undertow)的默认设置及其对性能的影响。 ... [详细]
  • 深入解析 Spring Security 用户认证机制
    本文将详细介绍 Spring Security 中用户登录认证的核心流程,重点分析 AbstractAuthenticationProcessingFilter 和 AuthenticationManager 的工作原理。通过理解这些组件的实现,读者可以更好地掌握 Spring Security 的认证机制。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文详细介绍了如何在 Spring Boot 应用中通过 @PropertySource 注解读取非默认配置文件,包括配置文件的创建、映射类的设计以及确保 Spring 容器能够正确加载这些配置的方法。 ... [详细]
  • 本文详细介绍了 Java 中 org.apache.xmlbeans.SchemaType 类的 getBaseEnumType() 方法,提供了多个代码示例,并解释了其在不同场景下的使用方法。 ... [详细]
author-avatar
芬飞满天2011
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有