首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

学习编程:Spring源码深度解析笔记——整体架构和环境搭建

作者:牛客张学友_

来源:牛客网

Spring 表示是一个开源框架,是为了解决企业应用程序开发复杂性由Rod Johnson创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。

Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

它为企业应用的开发提供一个轻量级的解决方案,该解决方案的包括:基于依赖注入的核心机制,基于AOP 的声明式事务管理,与多种持久层技术的无缝整合,以及优秀的Web MVC 框架等,Sping致力于Java EE 应用各层的解决方案,而不仅仅关注于某一层的方案,Spring 贯穿于表现层、业务层、持久层。然而Spring 并非是其他的框架的取代品,而是以高度的开发性与它们无缝整合。

Spring 的整体架构

1.SpringloC:

包含了最为基本的IoC容器BeanFactory的接口与实现,也就是说,在这个Spring的核心包中,不仅定义了IoC容器的最基本接口(BeanFactory),也提供了一系列这个接口的实现,如XmlBeanFactory就是一个最基本的BeanFactory (IoC容器),从名字上可以看到,它能够支持通过XML文件配置的Bean定义信息。除此之外,SpringIoC容器还提供了一个容器系列,如SimpleJndiBeanFactory、 StaticLismbleBeanFactor等。我们知道,单纯一个IoC容器对于应用开发来说是不够的.为了让应用更方便地使用IoC容器 ,还需要在IoC容器的外围提供其他的支持 ,这些支持包括Resource访问资源的抽象和定位等 ,所有的这些 ,都是这个Spring IoC模块的基本内容。

另外,在BeanFactory接口实现中,除了前面介绍的像BeanFactory那样最为基本的容器形态之夕外,Spring还设计了IoC容器的高级形态ApplicaticmContext应用上下文供用户使用,这些ApplicationConlext应用上下文 ,如FileSystemXmlApplicationContext,ClassPathXmlAppIicationContext,对应用来说, 是IoC容器中更面向框架的使用方式,同样,为了便于应用开发,像国际化的消息源和应用支持事件这些特性,也都在这个模块中配合IoC容器来实现,这些功能围绕着IoC基本容器和应用上下文的实现,构成了整个Spring IoC模块设计的主要内容。

2. SpringAOP:

这也是Spring的核心模块, 围绕着AOP的增强功能,Spring集成了AspectJ作为AOP的一个特定实现,同时还在JVM动态代理/CGLIB的基础上, 实现了—个AOP框架 ,作为Spring集成其他模块的工具,如TransactionProxyFactoryBean

声明式事务处理,就是通过AOP集成到Spring中的。在这个模块中,Spring AOP实现了一个完整的建立AOP代理对象,实现AOP拦截器,直至实现各种Advice通知的过程。在对这个模块的分析中可以看到,AOP模块的完整实现是我们熟悉AOP实现技术的一个不可多得的样本。

3.Spring MVC:

对于大多数企业应用而言, Web应用已经是一种普遍的软件发布方式,而在Web应用的设计中, MVC模式已经被广泛使用了。 在java的社区中,也有很多类似的MVC框架可以选择,而且这些框架往往和WebUI设计整合在一起,对于定位于提供整体平台解决方案的Spring,这样的整合也是不可缺少的。Spring MVC模块以DispatcherServlet为核心,实现了MVC模式,包括怎样与Web容器环境的集成,Web请求的拦裁.分发、处理和ModelAndView数据的返回,以及如何集成各种UI视图展现和数据表现,如PDF,Excel等, 通过这个模块,可以完成Web的前端设计。

4.Spring JDBC/SpringORM:

对于关系数据库的处理, Java提供了JDBC来进行操作,但在实际的应用中,单纯使用JDBC的方式还是有些繁琐, 所以在JDBC规范的基础上,Spring对JDBC做了一层封装,使通过JDBC完成的对数据库的操作更加简洁, SpringJDBC包提供了JdbcTemplale作为模板类 ,封装了基本的数据库操作方法,如数据的査询、更新等,另外, SpringJDBC还提供了RDBMS的操作对象,这些操作对象可以使应用以更面向对象的方法来使用JDBC, 比如可以使用MappingSqlQuery将数据库数据记录直接映射到对象集合,类似一个极为简单的ORM 工具。

除了通过SpringJDBC对数据库进行操作外,Spring还提供了许多对ORM工具的封装, 这些封装包括了常用的ORM工具,如Hibernate iBatis等,这一层封装的作用是让应用更方便地使用这些ORM 工具,而不是替代这些ORM工具,比如可以把对这些工具的使用和Spring提供的声明式事务处理结合起来。同时, Spring还提供了许多模板对象,如HibernateTemaplate这样的工具来实现对Hibernate的驱动,这些模板对象往往包装使用Hibernate的一些通用过程,比如Session的获取和关闭、事务处理的关联等,从而把一些通用的恃性实现抽象到Spring中来,更充分地体现了Spring的平台作用。

5.Spring事务处理:

Spring事务处理是一个通过Spring AOP实现自身功能增强的典型模块。在这个模块中, Spring把在企业应用开发中事务处理的主要过程抽象出来。这个声明式事务处理的实现,使开发人员只需要在IoC容器中对事务属性进行配置即可完成,同时, 这些事务处理的基本过程和具体的事务处理器实现是无关的,也就是说,应用可以选择不同的具体的事务处理机制,如JTA,JDBC, Hibernate等。

因为使用了声明式事务处理.具体的事务处理机制被纳入Spring事务处理的统一框架中完成 , 并完成与具体业务代码的解耦。 在这个模块中,可以看到一个通用的实现声明式事务处理的基本过程,比如怎样配置事务处理的拦截器,怎样读人事务配置属性, 并结合这些事务配置属性对事务对象进行处理,包栝事务的创建、挂起、提交、回滚等基本过程, 还可以看到具体的事务处理器(DataSourceTransactionManage,HibernateTransactionManager、JtaTransactionManager等) 是怎样封装不同的事务处理机制(JDBC、 Hibernate, JTA等) 的。

6.Spring远端调用:

Spring为应用带来的一个好处就是能够将应用解耦。应用解耦,一方面可以降低设计的复杂性,一方面,可以在解耦以后将应用模块分布式地部署,从而提高系统整体的性能。 在后一种应用场景下, 会用到Spring的远端调用, 这种远端调用是通过Spring的封装从Spring应用到Spring应用之间的端到端调用,在这个过程中,通过Spring的封装, 为应用屏蔽了各种通信和调用细节的实现,同时. 通过这一层的封装 ,使应用可以通过选择各种不同的远端调用来实现, 比如可以使用HTTP调用器(以HTTP协议为基础的), 可以使用第三方的二进制通信实现Hessian/Burlap甚至还封装了传统Java技术中的RMI调用。

7.Spring应用。

小结:

在我们平时的开发中,用到最多的场景就是使用SSH框架来完成企业应用的开发,取代传统的EJB笨重的开发模式。在SSH架构中 Struts作为Web UI层、 Spring作为中间件平台, Hibernate作为数据持久化工具(ORM工具) 来操作关系数据库。在这个架构中, Hibernate是一个独立的ORM数据持久化产品。

比较Spring JDBC和Hibernae对数据库操作的支持,对Spring来说,其对数据持久化的支持,虽然也有JDBC的封装,可以完成一些将简单的数据记录到Java数据对象的转换和映射工作,但和Hibernate相比, 功能上毕竟还是有一些单薄,比如Hibernate还提供了各种数据的查询、方便的对象和关系数据的映射等。因此,在大多数应用中,将Hibernate和Spring—起使用是非常普遍的,因为一方面Hibenate提供了完整的和已经成为事实标准的功能,另一方面, Spring也提供了与Hibernated的集成和封装,包括声明式事务处理的封装等。

对于Web 层而言,尽管Spring提供了自己的MVC实现,但与Struts的流行程度相比,这个Spring MVC的使用并不广泛, 毕竟在Web开发领域, Struts成名更早。在这个架构组合中,Spring起到的是一个应用平台的作用,通过Spring的集成,可以让应用在直接部署在Tomcat这个Web服务器上 ,因为作为一个直接依赖JVM的轻量级框架, Spring的部署方式就是一个简单的jar包, 不需要以一个J2EE应用服务器的形式出现,从而使整个应用在Tomcat这样的Web服务器上直接运行起来,非常简洁。

-------------------

*本文首发于牛客网,著作权全归原作者所有,如需转载,请联系原作者。

牛客网,一个程序员/产品/运营 学习、备考、求职必备刷题神器。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190404A0F7IW00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券