Spring框架
Spring简介
Spring是由Rod Johnson创建的一个实现了IoC思想的开源框架, Spring最初的出现是为了解决EJB臃肿的设计以及难以测试等问题
Spring是为了解决企业应用开发的复杂性而创建的,从简单性、可测试性和松耦合的角度而言任何Java应用都可以从Spring中受益
- Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架
- Spring为简化开发而生,如AOP可以让程序员只需关注核心业务的实现,尽可能的不再关注非业务逻辑代码(事务控制和安全日志等)
在Spring框架中它可以帮助我们new对象,并且它还可以将new出来的对象赋到属性上(给对象的属性赋值就是为了让对象之间产生关系)
- 我不在程序中采用硬编码的方式来new对象了(对象的创建权利交出去了)
- 我不在程序中采用硬编码的方式来维护对象的关系了,本质上就是给属性赋值(对象之间关系的管理权交出去了)
- 容器知道每个组件(类)运行的时候需要哪一个组件,然后通过反射的形式将容器中准备好的组件对象注入到需要的组件中
Spring框架的特点
Spring是轻量的: 完整的Spring框架可在一个大小只有1MB多的JAR文件里发布并且Spring所需的处理开销也是微不足道的
- Spring是非侵入式的即Spring框架的运行不需要其他任何框架的支撑(不需要使用别人的写好的类或者容器)
Spring通过一种称作控制反转IoC的技术促进了松耦合
- 当应用了IoC思想一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象
- JNDI的思想是对象从容器中查找依赖,IoC的思想是容器在对象初始化时不等对象请求就主动将依赖传递给它
Spring提供面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务例如审计(auditing)和事务(transaction)管理进行内聚性的开发
- 应用对象只实现它们应该做的完成业务逻辑仅此而已,它们并不负责其它的系统级关注点例如日志或事务支持
Spring包含并管理组件(有功能的一些类)的配置和生命周期,在这个意义上它是一种容器可以自动的探查出哪些组件需要用到另一些组件
- 某个组件(类)要使用Spring提供的更多(IOC、AOP)功能,必须加入到容器中指定每个bean如何被创建
- 基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例以及它们是如何相互关联的
- 传统的重量级的EJB容器经常是庞大与笨重的难以使用
Spring可以将简单的组件配置、组合成为复杂的应用 , 应用对象被声明式地组合是在一个XML文件里
- Spring也提供了很多基础功能(事务管理、持久化框架集成等),将应用逻辑的开发留给了你
Spring5中的8大模块
Spring Core
核心模块(框架的基础核心), 它提供了依赖注入特征来实现容器对Bean的管理,将应用配置和依赖从实际的应用代码中分离出来
- Spring核心容器的主要组件是BeanFactory(底层是工厂模式)
Spring Context
上下文模块扩展了BeanFactory
,增加了对国际化(I18N)消息、事件传播、验证的支持是Spring成为框架的原因
- 提供了许多企业服务,例如电子邮件、JNDI访问、EJB集成、远程以及时序调度(scheduling)服务
- 提供了对模版框架例如Velocity和FreeMarker集成的支持
Spring AOP
模块提供了对面向切面编程的丰富支持,为基于Spring的应用程序中的对象提供了事务管理服务
- 通过使用 Spring AOP不用依赖组件,就可以将声明性事务管理集成到应用程序中,可以自定义拦截器、切点、日志等操作
Spring DAO
简化JDBC的模块提供了一个JDBC的抽象层和异常层次结构,消除了烦琐的JDBC编码和数据库厂商特有的错误代码解析
Spring ORM
模块为几种流行的ORM框架提供了集成方案,包括Hibernate、JDO和iBATIS SQL映射,这些都遵从Spring的通用事务和DAO异常层次结构
Spring Web MVC
模块为构建Web应用提供了一个功能全面的MVC框架, 是专门为Servlet API和Servlet容器构建的
- 虽然Spring可以很容易地与其它MVC框架如Struts集成,但它自己的SpringMVC框架使用IoC对控制逻辑和业务对象提供了完全的分离
Spring WebFlux
模块(反应式堆栈Web框架Spring WebFlux是在 5.0 版的后期添加的)
- Spring WebFlux是完全非阻塞的,支持反应式流(Reactive Stream)背压,并在Netty,Undertow和Servlet 3.1+容器等服务器上运行
Spring Web
上下文模块为基于Web的应用程序提供了上下文,提供了Spring和其它Web框架的集成(比如Struts、WebWork)
- 提供了一些面向服务支持,例如实现文件上传的multipart请求
Spring5版本手动下载
第一步: 打开Spring官网 , 选择Spring Framework(其他项目通过Spring Framework衍生的框架)
第二步: 点击小猫头像进入github
第三步: 找到如图位置依次点击超链接
第四步: 在springframework目录下找到spring目录,点开之后你会看到很多不同的版本
第五步: 选择对应的spring版本并点击对应的url进行跳转
第六步: 点击spring-5.3.9-dist.zip
下载并将下载的zip包解压
Spring6版本Maven引入
如果你采用Maven的方式创建工程并且只是想用Spring的IoC功能,仅需要引入spring-context
依赖即可
- maven会帮你自动导入spring-context依赖的jar包(spring-core.jar 和 spring-beans.jar)
<!--Spring6的正式版发布之前,这个仓库地址是需要的-->
<repositories><repository><id>repository.spring.milestone</id><name>Spring Milestone Repository</name><url>https://repo.spring.io/milestone</url></repository>
</repositories><dependencies><!--spring context依赖:使用的是6.0.0-M2里程碑版--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>6.0.0-M2</version></dependency>
</dependencies>
Spring Framework的目录结构
docs
:spring框架的API帮助文档
libs
:spring框架的jar包,如果你采用maven的方式就不需要下载这些jar包,直接引入即可
spring-core-5.3.9.jar
: 字节码(这个是支撑程序运行的jar包)spring-core-5.3.9-javadoc.jar
: 代码中的注释spring-core-5.3.9-sources.jar
: 源码
schema:spring框架的XML配置文件相关的约束文件如spring-aop.xsd文件夹
- 约束Spring配置文件中能写什么标签以及标签中能写什么属性
Spring的jar文件
如果应用只需基本的IoC/DI支持,引入spring-core.jar及spring-beans.jar
文件就可以了
JAR文件 | 描述 |
---|---|
spring-aop-5.3.9.jar | 这个jar 文件包含在应用中使用Spring 的AOP 特性时所需的类 |
spring-aspects-5.3.9.jar | 提供对AspectJ的支持,可以方便的将面向切面的功能集成进开发环境中 |
spring-beans-5.3.9.jar | 这个jar文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean以及进行Inversion ofControl/Dependency Injection(IoC/DI)操作相关的所有类 |
spring-context-5.3.9.jar | 这个jar文件为Spring核心提供了大量扩展,可以找到使用Spring ApplicationContext特性时所需的全部类,JDNI 所需的全部类,instrumentation组件以及校验Validation 方面的相关类 |
spring-context-indexer-5.3.9.jar | 虽然类路径扫描非常快,但是Spring内部存在大量的类,添加此依赖可以通过在编译时创建候选对象的静态列表来提高大型应用程序的启动性能 |
spring-context-support-5.3.9.jar | 用来提供Spring上下文的一些扩展模块,例如实现邮件服务、视图解析、缓存、定时任务调度等 |
spring-core-5.3.9.jar | Spring框架基本的核心工具类, Spring其它组件要都要使用到这个包里的类是其它组件的基本核心,当然你也可以在自己的应用系统中使用这些工具类 |
spring-expression-5.3.9.jar | Spring表达式语言 |
spring-instrument-5.3.9.jar | Spring3.0对服务器的代理接口 |
spring-jcl-5.3.9.jar | Spring的日志模块,JCL全称为"Jakarta Commons Logging"也可称为"Apache Commons Logging" |
spring-jdbc-5.3.9.jar | Spring对JDBC的支持 |
spring-jms-5.3.9.jar | 这个jar包提供了对JMS 1.0.2/1.1的支持类,JMS是Java消息服务属于JavaEE规范之一 |
spring-messaging-5.3.9.jar | 为集成messaging api和消息协议提供支持 |
spring-orm-5.3.9.jar | Spring集成ORM框架的支持,比如集成hibernate,mybatis等 |
spring-oxm-5.3.9.jar | 为主流O/X Mapping组件提供了统一层抽象和封装,OXM(Object Xml Mapping)实现对象和XML之间的相互转换 |
spring-r2dbc-5.3.9.jar | Reactive Relational Database Connectivity (关系型数据库的响应式连接)的缩写,这个jar文件是Spring对r2dbc的支持 |
spring-test-5.3.9.jar | 对Junit等测试框架的简单封装 |
spring-tx-5.3.9.jar | 为JDBC、Hibernate、JDO、JPA、Beans等提供的一致的声明式和编程式事务管理支持 |
spring-web-5.3.9.jar | Spring集成MVC框架的支持,比如集成Struts等 |
spring-webflux-5.3.9.jar | WebFlux是Spring5添加的用于web的开发新模块(功能和SpringMVC类似),Webflux是当前一种比较流程响应式编程出现的框架 |
spring-webmvc-5.3.9.jar | SpringMVC框架的类库 |
spring-websocket-5.3.9.jar | Spring集成WebSocket框架时使用 |