热门标签 | 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源码的一个思路吧。如果有时间有机会,把我自己学习的一些想法,一些觉得该记录下来的东西写写,以后复习时候更好理解和记忆。




推荐阅读
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • iOS开启Google位置服务器和显示定位权限的方法
    本文介绍了在iOS开发中如何开启Google位置服务器和显示定位权限的方法,包括导入CoreLocation和MapKit库、在界面导入头文件和在info.plist文件中添加授权等步骤。同时还介绍了iOS11中NSLocationAlwaysAndWhenInUseUsageDescription的功能变化。阅读本文可以帮助开发者了解如何在iOS应用中使用Google位置服务器和处理定位权限相关的问题。 ... [详细]
  • Java如何导入和导出Excel文件的方法和步骤详解
    本文详细介绍了在SpringBoot中使用Java导入和导出Excel文件的方法和步骤,包括添加操作Excel的依赖、自定义注解等。文章还提供了示例代码,并将代码上传至GitHub供访问。 ... [详细]
  • SpringBoot简单日志配置
     在生产环境中,只打印error级别的错误,在测试环境中,可以调成debugapplication.properties文件##默认使用logbacklogging.level.r ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
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社区 版权所有