Spring概述「建议收藏」

Spring概述「建议收藏」Spring概述

大家好,又见面了,我是你们的朋友全栈君。

一、Spring是什么

Spring是一种多层的J2EE应用程序框架,其核心就是提供一种新的机制管理业务对象及其依赖关系。在这里插入图片描述

缩写 名称
JDBC java数据库连接
ORM 对象关系映射
OXM O/XMapper即O/X映射器
JMS Java消息服务
Transaction 事物
websocket 消息队列,实时通讯
Servlet 服务连接器
Web 网络
portlet 信息系统的表示层
beans 组件
core 核心
context 上下文
SpEL Spring 表达式

Core Container

spring-core,spring-bean:spring框架最基本的部分,包括了控制反转和依赖注入.BeanFactory是工厂模式的一种精妙实现.她去除了对总的单例模式的需求,同时让你真正的程序逻辑减少了依赖的配置和规范.

spring-context:context模块构建在core和beans提供的基础之上,她是在一个框架风格的方法里获得对象的途径,就像一个JNDI(Java Naming and DirectoryInterface,Java命名和目录接口)注册一样.context模块从beans模块继承特性,另外提供国际化(比如使用资源绑定),事件传播,资源加载,或者通过一个Servlet容器创建显而易见的context等支持.context模块也支持EJB,JMX(Java Management Extensions,即Java管理扩展),基本的远程处理等JavaEE的特性.ApplicationContext是context模块的焦点.spring-context-support提供通过缓存(EhCache,Guava,JCache),邮件(JavaMail),调度(CommonJ,Quartz)和模版引擎(FreeMarker,JasperReports,Velocity)把第三方库集成到一个spring应用的上下文(context)中.

Spring-expression:她提供一个强大的表达式语言在运行时来查询和操作对象图.她是在JSP 2.1规范中指定的一种扩展的统一表达式语言(unified EL).这种语言支持对属性的获取与设置,属性的赋值,方法的调用,获取数组集合索引的内容,逻辑和算数操作,命名变量,以及从Spring的IoC容器通过名字获取对象.她也支持列表映射和选择,就像一般的列表聚合一样.

AOP and Instrumentation

Spring-aop提供一个联盟标准的面向切面编程实现,她允许你定义诸如方法拦截器和切点干净利落地减少那些应该被分到一边的功能实现代码.使用源级的元数据功能,你也可以在你的代码里合并行为信息到一个方法里,就像.NET attributes.
单独的spring-aspects模块被集成到了AspectJ里了.
Spring-instrument模块提供了class instrumentation支持和类加载器的实现来在特定的应用服务器上使用.spring-instrument-tomcat模块包含了为tomcat提供的spring仪器(instrumentation)代理.

Messaging

Spring-messaging模块是spring framework 4 包含的一个从spring集成项目(如Meaasge,MessageChannel,MessageHandler,和其他基于消息应用的基础服务)而来的关键抽象.这个模块也包括一系列的用来映射消息到方法的注解,类似于基于编程模型的springMVC注解.

Data Access/Integration

数据的获取/整合 层包括了JDBC,ORM,OXM,JMS和事务模块.
Spring-jdbc模块提供了一个JDBC抽象层来移除冗长乏味的JDBC编码和解析数据库供应商明确的错误代码.
Spring-tx模块为实现了特殊借口的类和所以有你的POJOs(Plain Old Java Objects)提供了方案和声明式事务管理.
Spring-orm模块为流行的对象关系映射APIs(包括JPA,JDO和Hibernate)提供集成层.通过使用spring-orm模块,你可以组合使用所有这些O/R mapping框架,同时使用spring提供的其他特性,比如之前提到的简单的声明式的事务管理特性.
Spring-oxm模块提供一个支持Object/XML mapping实现(比如JAXB,XMLBeans,JiBX和XStream)的抽象层.
Spring-jms模块包括生产和消费消息的特性,自从spring框架4.1,提供了和spring-messaging模块的集成.

Web

Web层由spring-web,spring-webmvc,spring-websocket,和spring-webmvc-portlet模块构成.
Spring-web模块提供面向web整合特性,比如多部件的文件上传功能和使用Servlet监听器初始化的IoC容器,和一个面向web的应用上下文.她也包括一个Http客户端和spring远程操作支持的面向web的部分.
Spring-webmvc模块(也被称作Web-Servlet模块)包括为web应用而实现的Spring’s model-view-controller(MVC) 和REST Web Services .springmvc框架在model代码域和web表单以及其他所有spring框架的特性提供了一个清晰的界限.
Spring-webmvc-portlet模块(也被称作Web-Portlet模块)提供一个被用在Portlet环境和镜像的spring-webmvc模块功能的MVC实现.

Test

Spring-test模块支持在JUnit和TestNG下的sping组件的单元测试和集成测试.她提供了Spring ApplicationContexts 加载和缓存这些上下文.你可以独立的测试你的代码通过她提供的模拟对象.

二、为什么要使用Spring

  1. 降低组件之间的耦合度,实现软件各层之间的解耦。 Controller –> Service –> DAO
  2. 可以使用容器提供的众多服务,如:事务管理服务、消息服务等等。当我们使用容器管理事务时,开发人员就不再需要手工控制事务.也不需处理复杂的事务传播。
  3. 容器提供单例模式支持,开发人员不再需要自己编写实现代码。
  4. 容器提供了AOP技术,利用它很容易实现如权限拦截、运行期监控等功能。
  5. 容器提供的众多辅作类,使用这些类能够加快应用的开发,如: JdbcTemplate、 HibernateTemplate。
  6. Spring对于主流的应用框架提供了集成支持,如:集成mybaties,Hibernate、JPA、Struts等,这样更便于应用的开发。

三、Spring的核心及其组成

  1. 核心就是提供一种新的机制管理业务对象及其依赖关系。IoC(Inversion of Control 控制反转)/ DI (Dependency Injection依赖注入),AOP(面向切面编程)。
    1.1 IoC: Inversion of Control (控制反转) : 就是把要在程序中实例化的对象配置到文件中,在程序中不用new来产生,而是让容器通过配置文件返回一个给你,好处就是当需要更改业务逻辑时,方便替换对接口的不同实现类。
    1.2 AOP: Aspect Oriented Programming (面向切面编程) 用来在系统中提升业务的分离,把日志、安全、事务等东西和核心业务分离开,甚至核心业务都不知道它们的存在。基本实现就是对相关的方法进行拦截,添加所需的处理动作。
  2. Spring的七大组成模块
    在这里插入图片描述

四、Spring的特点

  1. 轻量级:轻量级是针对重量级容器(EJB)来说的,Spring的核心包就不到1M大小,而使用Spring的核心包所需的资源也很小,所以可以在小型设备中使用。
  2. 非入侵式:Spring目标是一个非入侵式的服务框架。原因是所有框架都是提供大量的功能供用户去使用,从而简化开发时间和成本,但由于大量的使用了框架的API,使应用程序和框架发生了大量的依赖性,无法从框架中独立出来,更加无法使程序组件在其他程序 中使用。
  3. 容器:
    3.1 Spring提供了容器功能,容器可以管理对象的生命周期、对象与对象间的关系、我们可以通过编写XML来设置对象关系和初始值,这样容器在启动之后,所有的对象都直接可以使用,不用编写任何编码来产生对象。
    3.2 Spring有两种不同的容器:
    3.2.1 Bean工厂(org.springframework.beans.factory.BeanFactory)是最简单的容器(是Spring基本的IOC容器),提供了基础的依赖注入支持
    3.2.2 应用上下文(org.springframework.context.ApplicationContext)建立在Bean工厂基础之上,提供了系统构架服务
  4. IoC / DI:
    4.1 Spring最核心的概念就是IoC(控制反转,所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转。 ),而他的另一个名字就是DI(依赖注 入,所谓依赖注入就是指:在运行期,由外部容器动态地将依赖对象注入到组件中。 )。
    4.2 使用Spring我们不必在程序中维护对象的依赖关系,只要在XML中设定,Spring容器会自已根据相关的配置去产生他们之间的关系,相当于所有的关系都是在容器运行的时候注入的,而本身他们的关系是没有的。
  5. AOP:
    5.1 Spring最被人重视的另一个方面就是对AOP的支持,其实AOP只是Spring支持的一个子容器
    5.2 AOP在一个服务流程中插入与业务逻辑无关的系统服务逻辑,如:日志、权限验证、异常处理、事务等,而把这些独立出来设计成一个对象,这样的对象称为Aspect。
  6. 持久层:Spring提供了对持久层的整合,如对JDBC的使用加以封装简化,提供事务功能,对ORM工具如Hibernate等的整合。
  7. Web框架整合:Spring也提供了Web的MVC解决方案,可以很好的善用IOC和AOP的功能,可以轻松的替换掉View层,如使用JPS,也可以使用熟悉的web容器,如struts技术与spring整合。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/106644.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Spring Cloud入门-Eureka服务注册与发现(Hoxton版本)

    Spring Cloud入门-Eureka服务注册与发现(Hoxton版本)文章目录什么是SpringCloud摘要Eureka简介搭建Eureka注册中心创建父工程springcloud-learning创建Eureka服务端模块使用IDEA的RunDashboard来运行SpringCloud应用搭建Eureka客户端搭建Eureka注册中心集群搭建两个注册中心运行Eureka注册中心集群给Eureka注册中心添加认证创建一个eureka-security-ser…

  • ISAPI Rewrite实现iis防盗链

    ISAPI Rewrite实现iis防盗链为了实现图片防盗链,根据网络上搜集的资料加上自己的实践,终于实现了iis下的图片防盗链功能。服务器系统windows2003server,参考资料来源:http://www.hua-lin.net/blog/isapi_rewrite-stop-leeching-39实施步骤:1.下载比较出名的www.helicontech.com提供的ISAPIRewrite软件的免费版本(免

  • websocket大文件发送(分片传送思想)

    websocket大文件发送(分片传送思想)目前的项目是在做一款带桌面共享的代码编辑器,其中需要一个发送大文件的功能,传统的node.js处理大文件就是用Buffer.slice(0.offset)的思路把文件分割开,然后通过tcp或udp分开发送。前端中处理二进制的有Blob,它也有slice的方法,也可以将文件拆分开。然后借助websocket发开发送,然后在客户端(注意不是服务端)将文件合并。有人说websocket可以直接发,但是他的大小受到限制,比如发200M的东西,就会出问题。而我的方案就不会存在问题.最主要的是在发送文件的同时也不会影响

  • 7.4v升12v锂电池升压芯片方案_电池升压

    7.4v升12v锂电池升压芯片方案_电池升压HU5912是一款5V输入,支持四节锂电池的升压充电管理IC。HU5912,采用异步开关架构,使其在应用时仅需要极少的外围器件,可有效减少整体方案尺寸,降低BOM成本。HU5912的升压开关充电转换器的工作效率为90%。HU5912输入电压为5V,内置自适应环路,可智能调节充电电流,防止拉挂适配器的输出,可匹配所有适配器。描述20W,4A输入异步开关升压充电升压充电效率90%充电电流外部可调自动调节输入电流,匹配所有适配器支持LED充电状态指示内置功率MO

  • SpringCloud(三)—-负载均衡解决方案分类及特征

    SpringCloud(三)—-负载均衡解决方案分类及特征

    2020年11月12日
  • 我用css精灵图拼接了自己的英文名字,不会还有人不知道精灵图技术吧?

    我用css精灵图拼接了自己的英文名字,不会还有人不知道精灵图技术吧?我用css精灵图拼接了自己的英文名字,不会还有人不知道精灵图技术吧?

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号