Spring源码学习(一) | 源码结构以及Spring容器内部成员概述

前言

       Spring是一款轻量级的javaee框架,它是非侵入式的开源框架。旨在业务逻辑层与其他层的解耦。本系列主要通过一个spring容器启动的demo来分析学习源码中spring容器是如何加载bean到容器等相关知识。本文则概述源码结构和spring容器包含的大体成员及作用来为后续学习做准备。

源码结构

在这里插入图片描述
Spring框架是一个分层框架,包含一系列的功能。从上述图可以看到源码有20多个模块提供功能。下面引用的他人的博客的内容,其中内容为翻译的spring官网已经十分详细,这里偷个懒直接引用了。

博文地址:Spring整体架构与核心技术
在这里插入图片描述

1.1 核心容器(Core Container)

  • spring-core 主要包含Spring框架基本的核心工具类
  • spring-beans 包含访问配置文件、创建和管理bean以及进行IoC/DI操作的相关类. BeanFactory
  • spring-context 构建与Core和Beans之上,继承了Beans的特性,扩展添加了国际化、时间传播、资源加载和对Context的创建和支持。ApplicationContext
  • spring-expression提供 一个强大的表达式语言用于在运行时查询和操作对象,该语言支持设置/获取属性值,属性的分配,方法的调用,访问数组上下文、容器和索引器、逻辑和算是运算符、命名变量以及从Spring的容器中根据名称检索对象

1.2 AOP和Instrumentation
包含模块spring-aop, spring-aspects, spring-instrument, spring-instrument-tomcat

  • spring-aop 提供了一个AOP联盟标准的面向方面编程的实现,它允许你定义方法拦截器与切入点,从而将逻辑代码与实现函数进行分离。
  • spring-aspects 提供了与AspectJ的集成
  • spring-instrument 提供了类工具的支持与classloader的实现,以便在特定的应用服务上使用。
  • spring-instrument-tomcat 包含了spring对于Tomcat的代理

1.3 消息(Messaging)
spring framework 4 包含了spring-messaging模块,其中使用了来自于spring integration项目的关键抽象,如Message, MessageChannel, MessageHandler等,他们可以作为基于消息的应用服务的基础。该模块还包含了一组可将消息映射到方法的注解,类似于spring-mvc的编程模型.

1.4 数据访问/集成(Data Access/ Integration)
包含spring-jdbc, spring-tx, spring-orm, spring-oxm, spring-jms.

  • spring-jdbc 提供了JDBC抽象层,消除了冗长的JDBC编码和解析数据库厂商特有的错误代码.
  • spring-tx 为实现了特定接口的类提供了可编程的声明式事务管理支持,对所有的POJOs都适用
  • spring-orm 提供了对象相关映射(ORM)集成,包含JPA, JDO, Hibernate,使用spring-orm模块可以将这些框架与spring提供的特性结合在一起使用,比如事务管理.
  • spring-oxm 提供了对Object/Xml Mapping实现的抽象,包括JAXB,Castor, XMLBeans, JiBX以及XStream.
  • spring-jms 包含了一些生产和消费消息的特性,从spring Framework 4.1开始,提供了与spring-messaging集成.

1.5 Web
包含spring-web, spring-webmvc, spring-websocket, spring-webmvc-portlet

  • spring-web提供了基于面向web集成的特性,如多文件上传功能、通过servlet listener初始化IoC容器与面向web的ApplicationContext,它还包含了HTTP客户端与Spring远程支持的web相关的部分.
  • spring-webmvc(又名web-servlet)包含了Spring对于Web应用的MVC与REST实现,Spring MVC框架提供了领域模型代码和Web表单之间的分离,并集成了Spring框架的所有其他特性.
  • spring-webmvc-portlet(又名web-portlet)提供了基于Portlet环境使用MVC的实现.

1.6 Test
spring-test模块通过Junit或TestNG对spring的组件提供了单元测试和集成测试

Spring容器启动简单demo

demo比较简单,一共3个类。后续主要详细学习test类中,spring容器启动的整个流程分析,即如下流程:

  • AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
  • context.register(AppConfig.class);
  • context.refresh();

1.配置类AppConfig

@Configuration
@ComponentScan("com.demo")
public class AppConfig {
}

2.dao类

@Component
public class UserDaoImpl {
	public void test(){
		System.out.println("this is tets asdasd a你好啊啊啊啊啊啊啊啊啊啊啊啊啊=========");
	}
}

3.Test测试类

	@org.junit.Test
	public void test1(){
		// DefaultListableBeanFactory
		// 实例化工厂,准备reader和scanner
		AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();

		// 把AppConfig类注册为一个BeanDefinition,然后放到DefaultListableBeanFactory的beanDefinitionMap里面
		context.register(AppConfig.class);

		// 准备好bean工厂,实例化对象
		context.refresh();

		UserDaoImpl dao = (UserDaoImpl) context.getBean("dao");
		dao.test();
	}

Spring容器包含成员以及作用概述

在这里插入图片描述
首先引用子路老师的图,大佬就是大佬。站在巨人的肩膀上,我们也许才能看得更远。

在这里插入图片描述
下面简要介绍一下这个图。图左边红色框是整个spring容器,即为AnnotationConfigApplicationContext,右边是spring容器里面包含的内容以及作用(根据颜色对应)。

Spring容器中包含

  • AnnotatedBeanDefinitionReader:是一个BeanDefinition读取器,给一个类给他,他帮你转换成为BeanDefinition,但是这个对象只能读取加了注解的类
  • ClassPathBeanDefinitionScanner:能够扫描一个类、包,并且转换成BeanDefinition
  • DefaultListableBeanFactory:spring环境中的一个工厂,如果需要生产bean就需要原料和机器

DefaultListableBeanFactory

  • BeanDefinition:一个bean的描述,简称bd
  • BeanDefinitionMap:一个map,里面存的是bean的名字和bean的描述(即BeanDefinition)
  • beanDefinitionNames:是一个list存放所有的beanName

其他概念:

BeanDefinitionRegistry:等同于DefaultListableBeanFactory,把一个BeanDefinition放到BeanDefinitionMap

BeanDefinitionHolder:是一个map,主要用于方便传参数

BeanExpressionResolver:解析bean的表达式,比如jsp中el表达式等等。

我们也可以从源码简单看一下:
在这里插入图片描述
在这里插入图片描述
由图可看出:AnnotationConfigApplicationContext含有AnnotatedBeanDefinitionReader和ClassPathBeanDefinitionScanner,然后它继承GenericApplicationContext,当然也包含GenericApplicationContext中的DefaultListableBeanFactory

       由此,本文着重介绍spring容器成员的一些概念以及作用,有个初步印象。后续深入学习的时候遇到了相关成员可返回进行查看。本文介绍到此,下一篇将会开始分析学习spring容器启动的流程。


上一篇:搭建spring源码环境
下一篇:Spring源码学习(二) | 主流程分析

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
陈开雄 Spring+3.x企业应用开发实战光盘源码 !!!!压缩包的jar包太多,太大无法上传,请谅解,需要的可以联系我 QQ:349721489 第1章:对Spring框架进行宏观性的概述,力图使读者建立起对Spring整体性的认识。   第2章:通过一个简单的例子展现开发Spring Web应用的整体过程,通过这个实例,读者可以快速跨入Spring Web应用的世界。   第3章:讲解Spring IoC容器的知识,通过具体的实例详细地讲解IoC概念。同时,对Spring框架的三个最重要的框架级接口进行了剖析,并对Bean的生命周期进行讲解。   第4章:讲解如何在Spring配置文件使用Spring 3.0的Schema格式配置Bean的内容,并对各个配置项的意义进行了深入的说明。   第5章:对Spring容器进行解构,从内部探究Spring容器的体系结构和运行流程。此外,我们还将对Spring容器一些高级主题进行深入的阐述。   第6章:我们从Spring AOP的底层实现技术入手,一步步深入到Spring AOP的内核,分析它的底层结构和具体实现。   第7章:对如何使用基于AspectJ配置AOP的知识进行了深入的分析,这包括使用XML Schema配置文件、使用注解进行配置等内容。   第8章:介绍了Spring所提供的DAO封装层,这包括Spring DAO的异常体系、数据访问模板等内容。   第9章:介绍了Spring事务管理的工作机制,通过XML、注解等方式进行事务管理配置,同时还讲解了JTA事务配置知识。   第10章:对实际应用Spring事务管理各种疑难问题进行透彻的剖析,让读者对Spring事务管理不再有云遮雾罩的感觉。   第11章:讲解了如何使用Spring JDBC进行数据访问操作,我们还重点讲述了LOB字段处理、主键产生和获取等难点知识。   第12章:讲解了如何在Spring集成Hibernate、myBatis等数据访问框架,同时,读者还将学习到ORM框架的混用和DAO层设计的知识。   第13章:本章重点对在Spring如何使用Quartz进行任务调度进行了讲解,同时还涉及了使用JDK Timer和JDK 5.0执行器的知识。   第14章:介绍Spring 3.0新增的OXM模块,同时对XML技术进行了整体的了解。   第15章:对Spring MVC框架进行详细介绍,对REST风格编程方式进行重点讲解,同时还对Spring 3.0的校验和格式化框架如果和Spring MVC整合进行讲解。   第16章:有别于一般书籍的单元测试内容,本书以当前最具实战的JUnit4+Unitils+ Mockito复合测试框架对如何测试数据库、Web的应用进行了深入的讲解。   第17章:以一个实际的项目为蓝本,带领读者从项目需求分析、项目设计、代码开发、单元测试直到应用部署经历整个实际项目的整体开发过程。
图书简介<br>本书分为6大部分,其第一部分为Spring概述性知识;第二部分讲解了Spring框架核心技术的内容;第三部分涵盖了在Spring使用各种数据访问技术的内容;第四部分讲解业务层各种技术的知识;第五部分是展现层技术的知识;第六部分讲解了如何测试Spring应用和Spring各种工具类的知识。 全书深刻揭示了Spring的技术内幕,对IoC、AOP、事务管理等根基性的技术进行了深度的挖掘。读者阅读本书后,不但可以熟练使用Spring的各项功能,对各种Spring内部机制也将了然于胸,真正做到知其然知其所以然。此外,我们还对Spring技术所涉及到的各种Java技术、Java设计模式进行了适时的介绍,通过这些背景知识的准备,读者在理解Spring的各项原理时将不会有任何的障碍。 <br>========================================================================<br><br>第1篇 概述<br>第1章 Spring概述<br>第2章 快速入门<br>第2篇 Spring核心技术<br>第3章 IoC容器概述<br>第4章 在IoC容器装配Bean<br>第5章 Spring容器高级主题<br>第6章 Spring AOP基础<br>第7章 基于@AspectJ和Schema的<br>第7章 AOP<br>第3篇 数据库访问<br>第8章 Spring对DAO的支持<br>第9章 Spring的事务管理<br>第10章 使用Spring JDBC访问数据库<br>第11章 使用JPA访问数据库<br>第12章 整合其他ORM框架<br>第4篇 业务层应用<br>第13章 任务调度和异步执行器<br>第14章 JavaMail发送邮件<br>第15章 在Spring使用JMS<br>第16章 在Spring开发Web Service<br>第17章 使用Acegi实施应用系统安全<br>第18章 动态语言支持<br>第5篇 展现层应用<br>第19章 Spring MVC之一<br>第20章 Spring MVC之二<br>第21章 集成其他Web框架<br>第6篇 其他<br>第22章 Spring应用的测试<br>第23章 Spring工具类盘点<br>附录A 各种数据库连接配置及驱动<br>附录B IDE开发环境设置 <br>=================================================<br>注意:全书章节过大,分为3部分上传。请下载其余两部分。<br>Apple祝您学习Spring愉快。<br>老规矩:有分的的给评分,每分的给顶一下。免费发放

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值