之前只是在学校里大概的学习了一下Spring框架的使用以及一些最基本、浅显的原理,并没有做出深入的学习,等到工作之后想提升自己的时候发现所掌握的Spring框架的简直烂如狗屎,为监督自己的学习进度,立下一个flag,一天一篇Spring框架的学习心得!!

1、Spring的诞生

Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。
控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。
面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。
容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。
框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。
所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为Spring中的各种模块提供了基础支持。

2、Spring的目标

为程序开发者提供一个一站式、轻量级的开发平台,这个平台不仅可以降低代码的开发难度、降低代码之间的耦合度还可以与第三方中间件更好、更便捷的结合。

通过IOC容器来管理POJO对象,以及对象之间的耦合关系。

通过AOP,以动态、非侵入的方式来增强服务的功能。

IOC和AOP是Spring的核心部分,是最为底层的抽象。

3、Spring的整体结构

(1)Spring IOC

Spring的IOC中包含了最基本的IOC容器的beanFactory的接口和实现。

BeanFactory中包含三个子类,分别是ListableBeanFactory、HierarchicalBeanFactory 和AutowireCapableBeanFactory。而最终实现的类是DefaultListableBeanFactory,实现这个类即可实现所有类。

public interface BeanFactory {
 
    //这里是对FactoryBean的转义定义,因为如果使用bean的名字检索FactoryBean得到的对象是工厂生成的对象,
    String FACTORY_BEAN_PREFIX = "&";
 
    //根据Bean的名字来找到对应的实例。
 
    Object getBean(String name) throws BeansException;
 
    //根据bean的名字和Class类型来得到bean实例,和上面的方法不同在于它会抛出异常:如果根据名字取得的bean实例的Class类型和需要的不同的话。
    Object getBean(String name, Class requiredType) throws BeansException;
 
    //查看是否在IOC容器有这个名字的bean
    boolean containsBean(String name);
 
    //根据bean名字得到bean实例,并同时判断这个bean是不是单件
    boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
 
    //对得到bean实例的Class类型
    Class getType(String name) throws NoSuchBeanDefinitionException;
 
    //得到bean的别名,如果根据别名检索,那么其原名也会被检索出来
    String[] getAliases(String name);
}

Spring不仅仅只提供一个IOC容器。

 ① AnnotationConfigApplicationContext:从一个或多个基于java的配置类中加载上下文定义,适用于java注解的方式;

 ② ClassPathXmlApplicationContext:从类路径下的一个或多个xml配置文件中加载上下文定义,适用于xml配置的方式;

 ③ FileSystemXmlApplicationContext:从文件系统下的一个或多个xml配置文件中加载上下文定义,也就是说系统盘符中加载xml配置文件;

 ④ AnnotationConfigWebApplicationContext:专门为web应用准备的,适用于注解方式;

 ⑤ XmlWebApplicationContext:从web应用下的一个或多个xml配置文件加载上下文定义,适用于xml配置方式。

(2)Spring AOP

Spring集成了AspectJ作为AOP的特定时现,同时还在JVM动态代理和CGLIB的基础上来实现AOP框架。

JVM动态代理实现分为两种,一种是JDK实现的动态代理和CGLIB方式,不需要强制实现接口。

AOP的最底层实现原理就是代理模式。

例如TransactionProxyFactoryBean声明式事务处理就是一个完整的AOP代理对象,实现AOP拦截器,甚至实现所有Advice的过程。

代理模式:若是我们想使用A类时,我们不直接使用,而是通过B类来调用A类来实现我们最初要使用A类的初衷。

(3)Spring MVC

Spring MVC是为了是后端框架与前端Web模块更好的整合在一起出现的。这个模块以DispatcherServerlet为核心。来实现MVC模式,其中包括与Web容器的集成、Web请求的拦截、分发、处理以及ModuleAndView数据的返回,以及集成各种UI试图展现和数据表现。

(4)Spring JDBC/ORM

在开发过程中,对关系型数据库的操作是很重要的,使用JAVA提供的JDBC过于繁琐,所以Spring提供Spring JDBC来处理对数据库的操作,Spring JDBC就是对JAVA提供的JDBC的进一层封装,使用JdbcTemplate做为模板,其中封装了最近本的数据库操作,例如:增加、修改、删除、查询等,并且还提供了RDBMS的操作对象,通过这些对象可以将数据映射到集合中,类似于一个小型的ORM操作。

Spring ROM:Spring框架封装了许多ORM工具,例如:Hibernate、Mybatis等,还为其提供了许多模板,例如HibernateTemplate等,便于与ORM框架联合使用。

(5)Spring 事务处理

Spring事务处理是通过SpringAOP实现的增强自身服务的模块,在这个模块中,Spring把事务处理的主要过程提出来,并且通过AOP的切面增强声明式事务处理功能。

(6)Spring 远端调用

通过Spring的端对端调用,通过Spring的封装,隐藏了各种通信以及调用细节。

(7)Spring 应用

  1. Spring IO Platform : Spring IO是可集成的、构建现代化应用的版本平台。Spring IO是模块化的、企业级的分布式系统,包括一系列依赖,是的开发者仅能对自己所需的部分进行完全的部署控制。
  2. Spring Boot:Spring应用快速开发工具,用来简化Spring应用开发过程。
  3. Spring XD:Spring XD(eXtreme Date,极限数据)是Pivotal的大数据产品。它结合了Spring Boot和Grails,组成Spring IO平台的执行部分。
  4. Spring Data:Spring Data是为了简化构建基于Spring框架应用的数据访问实现,包括非关系数据库、Map-Reduce框架、云数据服务等;另外,也包含对关系数据库的访问支持。
  5. Spring Integration:Spring Integration为企业数据集成提供了各种适配器,可以通过这些适配器来转换各种消息格式,并帮助Spring应用完成与企业应用系统的集成。
  6. Spring Batch:Spring Batch是一个轻量级的完整批处理框架,皆在帮助应用开发者构建一个健壮、高效的企业级批处理应用(这些应用的特点是不需要与用户交互,重复的操作量大,对于大容量的批量数据处理而言,这些操作往往要求较高的可靠性)
  7. Spring Security:Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文配置的bean,充分利用Ioc和AOP功能,为应用系统提供声明式的安全访问控制功能。
  8. Spring Hateoas:Spring Hateoas是一个用户支持实现超文本驱动的REST Web服务的开发库,是Hateoas的实现。Hateoas(Hypermedia as the engine of application state)是REST架构风格中最复杂的约束,也是构建成熟REST服务的核心。它的重要性在于打破了客户端和服务器之间严格的契约,是的客户端可以更加智能和自适应。
  9. Spring Social:Spring Social是Spring框架的扩展,用来方便开发Web社交应用程序,可通过该项目来创建与各种社交网站的交互,如Facebook,LinkedIn、Twitter等。
  10. Spring AMQP:Spring AMQP是基于Spring框架的AMQP消息解决方案,提供模版化的发送和接收消息的抽象层,提供基于消息驱动的POJO。这个项目支持Java和.NET连个版本。Spring Source旗下的Rabbit MQ就是一个开源的基于AMQP的消息服务器。
  11. Spring for Android:Spring for Android为Android终端开发应用提供Spring的支持,它提供了一个在Android应用环境中工作、基于Java的REST客户端。
  12. Spring Mobile:Spring Mobile是基于Spring MVC构建的,为移动端的服务器应用开发提供支持。
  13. Spring Web Flow:Spring Web Flow(SWF)一个建立在Spring MVC基础上的Web页面流引擎。
  14. Spring Web Service:Spring Web Service是基于Spring框架的Web服务框架,主要侧重于基于文档驱动的Web服务,提供SOAP服务开发,允许通过多种方式创建Web服务。
  15. Spring LDAP:Spring LDAP是一个用户操作LDAP的Java框架,类似Spring JDBC提供了JdbcTemplate方式来操作数据库。这个框架提供了一个LdapTemplate操作模版,可帮助开发人员简化looking up、closing contexts、encoding/decoding、filters等操作。
  16. Spring Session: Spring Session致力于提供一个公共基础设施会话,支持从任意环境中访问一个会话,在Web环境下支持独立于容器的集群会话,支持可插拔策略来确定Session ID,WebSocket活跃的时候可以简单地保持HttpSession。
  17. Spring Shell: Spring Shell提供交互式的Shell,用户可以简单的基于Spring的编程模型来开发命令。

---------------------
作者:DoReMiFaSolLaTi
来源:CSDN
原文:https://blog.csdn.net/xxieyyuhhui/article/details/80654296
版权声明:本文为博主原创文章,转载请附上博文链接!

4、Spring的适用场景

适用于框架集合开发,例如:使用SSH框架进行程序开发,S-Struts框架:Web UI层,S-Spring框架:中间件平台,H-Hibernate框架:ORM工具。通过Spring框架改进体系结构,可以帮助我们选择不同的技术实现,例如将Struts替换成Spring MVC,将Hibernate替换成Mybatis等,虽然我们不会这么无聊的去做,但是选择Spring作为应用平台,它给我们提供了这样的可能性和选择,降低了平台锁定的风险。

Spring学习(一)--Spring的设计与整体架构的更多相关文章

  1. Spring学习(十一)-----Spring使用@Required注解依赖检查

    Spring学习(九)-----Spring依赖检查 bean 配置文件用于确定的特定类型(基本,集合或对象)的所有属性被设置.在大多数情况下,你只需要确保特定属性已经设置但不是所有属性.. 对于这种 ...

  2. Spring学习(六)-----Spring使用@Autowired注解自动装配

    Spring使用@Autowired注解自动装配 在上一篇 Spring学习(三)-----Spring自动装配Beans示例中,它会匹配当前Spring容器任何bean的属性自动装配.在大多数情况下 ...

  3. spring学习(三) ———— spring事务操作

    前面一篇博文讲解了什么是AOP.学会了写AOP的实现,但是并没有实际运用起来,这一篇博文就算是对AOP技术应用的进阶把,重点是事务的处理. --wh 一.jdbcTemplate 什么是JdbcTem ...

  4. Spring学习笔记--Spring IOC

    沿着我们上一篇的学习笔记,我们继续通过代码学习IOC这一设计思想. 6.Hello类 第一步:首先创建一个类Hello package cn.sxt.bean; public class Hello ...

  5. spring学习12 -Spring 框架模块以及面试常见问题注解等

    以下为spring常见面试问题: 1.Spring 框架中都用到了哪些设计模式? Spring框架中使用到了大量的设计模式,下面列举了比较有代表性的: 代理模式—在AOP和remoting中被用的比较 ...

  6. Spring学习【Spring概述】

    从本文開始,我们就要一起学习Spring框架,首先不得不说Spring框架是一个优秀的开源框架. 当中採用IoC原理实现的基于Java Beans的配置管理和AOP的思想都是非常值得学习与使用的.以下 ...

  7. spring学习之spring入门

    一 spring的基础 1:什么是spring spring是由Rod Johnson组织和开发的一个分层 的Java SE/EE 一站式轻量级开源框架,它以Ioc(控制反转)和 AOP(面向切面编程 ...

  8. Spring学习笔记--spring+mybatis集成

    前言: 技术的发展, 真的是日新月异. 作为javaer, 都不约而同地抛弃裸写jdbc代码, 而用各种持久化框架. 从hibernate, Spring的JDBCTemplate, 到ibatis, ...

  9. Spring学习笔记—Spring之旅

    1.Spring简介     Spring是一个开源框架,最早由Rod Johnson创建,并在<Expert One-on-One:J2EE Design and Development> ...

随机推荐

  1. Java面试题(Hibernate篇)

    Hibernate 113.为什么要使用 hibernate? 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码. Hibernate是一个基于JDBC的主流持久化框架,是一个 ...

  2. 项目通用配置xml

    SqlMapperClient.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE co ...

  3. soso官方:搜索引擎的对检索结果常用的评测方法

    http://www.wocaoseo.com/thread-188-1-1.html       很久很久以前,搜索引擎还不象今天的百花齐放,人们对它的要求较低,只要它能把互连网上相关的网站搜出来, ...

  4. Vue.js学习(八)—— 树形结构下拉框组件vue-treeselect

    vue-treeselect是一个多选组件,具有对Vue.js的嵌套选项支持. 具有嵌套选项支持的单个和多个选择 模糊匹配 异步搜索 延迟加载(仅在需要时加载深层选项的数据) 键盘支持(使用Arrow ...

  5. pybind11: C++ 工程如何提供 Python 接口

    C/C++ 工程提供 Python 接口,有利于融合进 Python 的生态.现在 Python 在应用层,有其得天独厚的优势.尤其因为人工智能和大数据的推波助澜, Python 现在以及未来,将长期 ...

  6. Unity Prefab关联

    Unity3D研究院之Prefab里面的Prefab关联问题http://www.xuanyusong.com/archives/3042

  7. C# OWC11

    public void OcwChart(int[] Data,string[] DataName,string Yname,string Xname,string ChartName,string ...

  8. Oracle的dbms_random.value(min,max)函数包括边界值吗?数据是如何分布的?

    事先申明下,我的DB环境是Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production,不保证在其它版本下也 ...

  9. SpringMVC-Controller&RestFul

    Controller与RestFul 目录 Controller与RestFul 1. Controller 1. 控制器Controller 2. 利用接口定义控制器 1. 实现Controller ...

  10. 企业邮箱选择,商务办公为什么选TOM企业邮箱?

    企业邮箱是工作中的重要工具,它可以帮助我们更规范的上传下达.更高效的管理工作,也是拓展合作伙伴的敲门砖及必杀技.比如写一封诚意满满的合作邀请,再比如重要关头写一封合作协议.毫不夸张,企业邮箱不仅能节省 ...