Spring源码-简介篇

       由于公司业务收到国家的管控,大部分业务也已经停掉了,不得不出来找工作,看了这么多的源码,也是时候拿出来检验一下自己了,现在主要针对spring源码下面从几个方面来回顾:

       1、Spring的简单介绍;

       2、Spring的组成;

       3、Spring的IOC容器;

       4、Spring的面向切面编程(AOP);

       5、Spring管理事务;

一、Spring的简单介绍

Spring 是最受欢迎的企业级 Java 应用程序开发框架,数以百万的来自世界各地的开发人员使用 Spring 框架来创建性能好、易于测试、可重用的代码。

Spring 框架是一个开源的 Java 平台,它最初是由 Rod Johnson 编写的,并且于 2003 年 6 月首次在 Apache 2.0 许可下发布。

Spring 是轻量级的框架,其基础版本只有 2 MB 左右的大小。

Spring 框架的核心特性是可以用于开发任何 Java 应用程序,但是在 Java EE 平台上构建 web 应用程序是需要扩展的。 Spring 框架的目标是使 J2EE 开发变得更容易使用,通过启用基于 POJO 编程模型来促进良好的编程实践。

二、Spring的组成

首先我们先来看一张图:

                                              Spring 体系结构

核心容器:主要有spring-core,spring-beans,spring-context,spring-context-support,spring-expression(Spel)

  • spring-core:提供了框架的基本组成部分,包括IOC和DI等功能;
  • spring-beans:提供了BeanFactory,工厂的实现,以及如何管理bean,bean的创建,bean的获取等。
  • spring-context:主要是建立在core和beans模块之上建立起来的,context继承了beans模块,并添加了国际化,事件传播,资源加载和透明的创建上下文(servlet容器),也支持JAVAEE的功能,JMX,EJB和远程调用,其中ApplicationContext是本模块的焦点,spring-context-support模块提供了第三库集成到Spring上下文的支持,比如缓存(EhCache, Guava, JCache),邮件(JavaMail)、调度(CommonJ, Quartz)、模板引擎(FreeMarker, JasperReports, Velocity)等。
  • spring-expression:提供了强大的表达式语言,用在运行时查询和操作对象图,它是在JSP2.0中定义的统一表达式语言的扩展,支持set和get属性,属性赋值,方法调用,访问数组集合及索引内容,逻辑算数运算符,变量命名,通过名字从springde ioc容器中检索对象,还支持列表的投影,选择及聚合等。

 各个模块的完整的依赖关系图:

                                                           
数据访问/集成

数据访问/集成层包括 JDBC,ORM,OXM,JMS 和事务处理模块,它们的细节如下: 

(注:JDBC=Java Data Base Connectivity,ORM=Object Relational Mapping,OXM=Object XML Mapping,JMS=Java Message Service)

  • JDBC:提供了jdbc层的抽象,它消除了jdbc编码和数据库供应商特定错误的解析
  • ORM:提供了对流行的关系对象的映射的api的集成,jpa,Hibernate,jdo。通过此模块可以让这些orm与Spring的其它模块进行整合,比如事务管理。
  • OXM:提供了对OXM实现的支持,比如JAXB、Castor、XML Beans、JiBX、XStream等。
  • JMS:包含生产(produce)和消费(consume)消息的功能。从Spring 4.1开始,集成了spring-messaging模块。
  • 事务模块为实现特殊接口类及所有的 POJO 支持编程式和声明式事务管理。

Web

Web 层由 Web,Web-MVC,Web-Socket 和 Web-Portlet 组成,它们的细节如下:

web:提供了面向web的基本功能和web的应用上下文,比如多部分文件的上传功能,使用servlet容器初始化ioc容器。

还包括了http客户端和spring远程调用的中与web相关的部分。

web-mvc:提供了模型视图控制mvc和rest-web服务的发现,spring的mvc框架可以使代码和页面进行分离,且可以与Spring的其它框架进行进行集成。

web-socket: 模块为 WebSocket-based 提供了支持,而且在 web 应用程序中提供了客户端和服务器端之间通信的两种方式。

web-portlet:提供了用于Portlet环境的MVC实现,并反映了spring-webmvc模块的功能

其它

还有其他一些重要的模块,像 AOP,Aspects,Instrumentation,Web 和测试模块,它们的细节如下:

         aop 模块提供了面向方面的编程实现,允许你定义方法拦截器和切入点对代码进行干净地解耦,从而使实现功能的代码彻底的解耦出来。使用源码级的元数据,可以用类似于.Net属性的方式合并行为信息到代码中。

  • Aspects 模块提供了与 AspectJ 的集成,这是一个功能强大且成熟的面向切面编程(AOP)框架。
  • Instrumentation 模块在一定的应用服务器中提供了类 instrumentation 的支持和类加载器的实现。
  • Messaging 模块为 STOMP 提供了支持作为在应用程序中 WebSocket 子协议的使用。它也支持一个注解编程模型,它是为了选路和处理来自 WebSocket 客户端的 STOMP 信息。
  • 测试模块支持对具有 JUnit 或 TestNG 框架的 Spring 组件的测试。

 

三、Spring的IOC容器

IOC容器:spring容器是Spring框架的核心,容器主要负责对象的创建,配置,获取和管理他们的生命周期从创建到销毁。通过阅读配置元数据的指令,容器知道哪些对象将要被实例化,配置和组装。配置元数据的方式有xml,java代码或java注解,ioc容器具有依赖注入的功能,ioc容器负责实例化,定位,配置应用程序中的对象以及应用程序对象之间的依赖关系。

那么什么是Spring的bean呢:

spring bean的定义:

在官网:

In Spring, the objects that form the backbone of your application and that are managed by the Spring IoC container are called beans. A bean is an object that is instantiated, assembled, and otherwise managed by a Spring IoC container.

翻译过来就是:

在 Spring 中,构成应用程序主干并由Spring IoC容器管理的对象称为bean。bean是一个由Spring IoC容器实例化、组装和管理的对象。

从概念中获取到如下信息:

1、bean是一个对象,一个或多个不限定。

2、bean是由使用spring ioc容器负责创建,管理的。

3、我们的应用程序是由一个个的bean组成的。

我们从java bean的定义来看:

  • 属性私有化(private),只能通过getter和setter方法进行访问和设置
  • 需要有无参构造器
  • 实现序列化接口

可以看出spring-bean:

1、bean容器:主要用来管理对象和依赖,以及依赖的注入。

2、bean是一个java对象,根据bean规范编写出来的类,并由bean容器生成的对象就是一个bean。

那么ioc是如何创建bean,并把这些bean进行管理的呢,以及如何解决bean之间的依赖呢?请往下看。。。

参考链接:https://www.w3cschool.cn/wkspring/dcu91icn.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值