Spring源码学习(1)

2022/2/27 22:21:51

本文主要是介绍Spring源码学习(1),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Spring源码学习(一)

一、前言

  该系列博客用于记录本人学习Spring源码的过程,以Spring5.1为例。第一篇笔记不会记录太多代码相关的内容,更多的是梳理一下Spring整体的结构,本人学识有限,如果书写过程中有什么纰漏希望及时指出。

二、Spring简介

  Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。

三、Spring核心概念

  提到Spring,最核心的两个概念就是IOC(Inversion of Control,控制反转),AOP(Aspect Oriented Programming,面向切面编程)。我会首先尝试讲解IOC这个概念。通常情况下我们会将Spring的工厂称之为容器,因为在Spring中工厂不仅仅是创建对象,同时会维护整个对象的生命周期。即工厂创建了对象,同时也保存了对象所以我们会称之为IOC容器(这里我们默认Spring创建的是单例对象,即scope为singleton)。首先看一个Spring的Demo,下面的代码是一个最简单的使用Spring为我们创建对象的例子。从代码中不难看出,我们使用ApplicationContext类来获取配置好的bean,并且让Spring帮我们创建对象。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--定义一个Person对象-->
    <bean id="person" class="com.cmxy.entity.Person">
        <property name="age" value="27"/>
        <property name="name" value="hardy"/>
    </bean>
</beans>

  

  public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        Person person = context.getBean("person", Person.class);
        System.out.println(person);
    }

  ApplicationContext是一个高级工厂,整合了非常多不同的工厂,即ApplicationContext用于众多工厂的能力。可以看到,首先ApplicationContext是一个接口,其次继承了ListableBeanFactory、HierarchicalBeanFactory(这两个工厂后续也会讲解),因为是源码学习,所以我们需要深入底层。这里直接给出结论,Spring众多工厂中处于最底层的是BeanFacotry。

BeanFacotry(Spring工厂核心的接口!!!)

 

 

 

 

   既然要学习源码就要对结构有一个大体的了解。首先看一下Spring最核心的工厂接口的继承关系。从图中不难看出BeanFacotry的众多的子接口,以及子类。例如HierarchicalBeanFactory、AutowireCapableBeanFactory、ListableBeanFactory等等一些列的。子接口是在拥有父接口所有能力的前提下,对父接口进行功能的扩展。接下来简单介绍一下BeanFacotry子接口的作用(之后会详细介绍)。

  1、BeanFactory:Spring工厂体系中最底层的接口,定义了工厂的基本操作,例如获取bean、是否包含某个bean、获取Bean的类型。

  2、HierarchicalBeanFactory(可继承的Bean工厂):顾名思义,该接口给工厂赋予了可继承的能力。应用:SpringMVC中的父子工厂。

  3、AutowireCapableBeanFactory(自动注入Bean工厂):给工厂赋予自动注入的能力。

  4、ListableBeanFactory:给工厂赋予获取相关配置信息的能力。

  5、ConfigurableBeanFactory(可配置工厂):可配置Bean是否为单例、以及提供类型转换等功能。

  Spring还有许多的工厂,Spring容器是由一系列的工厂组合而成,Spring的设计严格按照单一职责原则所以每个工厂各司其职,组合在一起最终形成了一个功能丰富的顶层接口(ApplicationContext),Spring为了方便我们开发,也是提供了几个集成了所有工厂能力的类,其中一个就是我们最为熟知的ApplicationContext(接口),以及XmlBeanFactory(实现类,虽然已经过期,但是后续Spring提供的替代类只不过是把这个类里的方法提取出来,所以学习源码时先按这个类)。

  未完待续。。。

  

 



这篇关于Spring源码学习(1)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程