序言
首先说下,之所以还要写这么原始的东西的原因,因为一开始是要学Spring Boot,但是以前没有学过Spring,虽然这并不妨碍我们学习使用Spring Boot,但是正所谓知其然更要知其所以然,所以我想如果能够更好地掌握Spring知识,对我以后的学习也会有更大的帮助吧,这也是促成我写这些文章的原因。
开始
首先,我们可以下载Spring源码,下载地址(http://repo.spring.io/release/org/springframework/spring/)
日常生活中,我们发现什么东西都是原装的好,所以无论学习编程语言还是框架,与其花大量的时间搜资料,不如静心好好学习官网,官网是最好的学习资料(权威、准确的第一手材料),spring的官方网址:https://spring.io/
官网的界面简洁清新,导航很明确,进入projects
从配置到安全,Web应用到大数据 - 无论您的应用程序有什么样的需求,都有一个Spring Project来帮助您构建它,Spring的涵盖面是很宽广的,你需要什么可以在上图所示的页面中查找,本页很清晰,很容易找到spring framework, 还有一段英文介绍provides core support for dependency injection, transaction management, web apps, data access, messaging and more.(提供了核心功能依赖注入、事务管理、web应用、数据访问、远程访问等等)
选择Spring framework
本页有介绍、特点说明、spring框架版本对jdk的要求、以及如果使用Maven或 Gradle构建项目的话,官网还提供了相应的范例向导。
最重要是在特征下面的这段话,需要注意:
All avaible features and modules are described in the Modules section of the reference documentation. Their maven/gradle coordinates are also described there.
这段话很清晰的告诉我们点击这段话上的链接,专门有关于所有特征和模块以及各模块之间关系的介绍。这是一页有关于spring框架的很详细的介绍,包括spring的Jar包链接以及说明,所以很有必要认真看一看。
Spring框架简介
Spring 框架是一个轻量级的企业级开发的一站式解决方案 。 所谓解决方案就是可以基于spring解决 JavaEE开发的所有问题。 Spring框架主要提供了 IoC容器、 AOP、数据访问、 Web开发、消息、测试等相关技术的支持。
Spring使用简单的 POJO(plain old Java object, 即无任何限制的普通 Java对象)来进行企业级开发。每一个被 Spring管理的 Java对象都称之为 Bean;而 Spring提供了一个 IoC容器用来初始化对象, 解决对象间的依赖管理和对象的使用 。
优点
概括起来,Spring给我们带来以下的好处:
1、方便解耦,简化开发
通过 Spring提供的 IoC容器, 我们可以将对象之间的依赖关系交由 spring进行控制, 避免硬编码所造成的过度程序耦合。有了 Spring,用户不必再为单实例模式类、属性文件解析等这些很底层的需求编写代码, 可以更专注于上层的应用
2、AOP编程的支持
通过 Spring提供的 AOP功能,方便进行面向切面的编程,许多不容易用传统 OOP实现的功能可以通过 AOP轻松应付。
3、声明式事务的支持
在 Spring中,我们可以从单调烦闷的事务管理代码中解脱从来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。
4、方便程序的测试
可以用非容器依赖的编程方式进行几乎所有的测试工作,在 Spring里,测试不再是昂贵的操作,而是随手可做的事情。
5、方便集成各种优秀框架
Spring不排斥各种优秀的开源框架,相反,Spring可以降低各种框架的使用难度, Spring提供了对各种优秀框架(如Struts, Hibemate、 Hessian、 Quartz等)的直接支持。
6、降低 JavaEE API的使用难度
Sprjng对很多难用的 Java EE API(如 JDBC, JavaMail,远程调用等)提供了一个薄薄的封装层,通过 Spring的简易封装,这些 JavaEEAPI的使用难度大为降低。
Spring的模块
spring是模块化的,这意味着你可以只使用你需要的 Spring的模块。
每一个最小单元, spring都至少有一个对应的jar包。
(1) 核心容器(Core Container)
容器是Spring框架最核心的部分,它管理着Spring应用中bean的创建、配置和管理。在该模块中,包括了Spring bean工厂,它为Spring提供了DI的功能。基于bean工厂,我们还会发现有多种Spring应用上下文的实现,每一种都提供了配置Spring的不同方式。除了bean工厂和应用上下文,该模块也提供了许多企业服务,例如E-mail、JNDI访问、EJB集成和调度。
所有的Spring模块都构建于核心容器之上。当你配置应用时,其实你隐式地使用了这些类。
Spring-Core:核心工具类, Spring其他模块大量使用spring_core:
Spring-Beans: Spring定义 Bean的支持.
Spring-Context: 运行时 Spring容器;
Spring-Context-Support: Spring容器对第三方包的集成支持;
Spring-Expression: 使用表达式语言在运行时查询和操作对象 。
(2)AOP
在AOP模块中,Spring对面向切面编程提供了丰富的支持。这个模块是Spring应用系统中开发切面的基础。与DI一样,AOP可以帮助应用对象解耦。借助于AOP,可以将遍布系统的关注点(例如事务和安全)从它们所应用的对象中解耦出来。
Spring-AOP:基于代理的 AOP支持;
Spring-Aspects:基于 AspectJ 的 AOP支持。
(3)消息(Messaging)
Spring-Messaging: 对消息架构和协议的支持 。
(4) Web
MVC(Model-View-Controller)模式是一种普遍被接受的构建Web应用的方法,它可以帮助用户将界面逻辑与应用逻辑分离。Java从来不缺少MVC框架,Apache的Struts、JSF、WebWork和Tapestry都是可选的最流行的MVC框架。
虽然Spring能够与多种流行的MVC框架进行集成,但它的Web和远程调用模块自带了一个强大的MVC框架,有助于在Web层提升应用的松耦合水平。
除了面向用户的Web应用,该模块还提供了多种构建与其他应用交互的远程调用方案。Spring远程调用功能集成了RMI(Remote Method Invocation)、Hessian、Burlap、JAX-WS,同时Spring还自带了一个远程调用框架:HTTP invoker。Spring还提供了暴露和使用REST API的良好支持。
Spring-Web:提供基础的 Web集成的功能,在 Web项目中提供 spring的容器;
Spring-Webmvc:提供基于 Servlet的 SpringMVC;
Sprmg-WebSocket: 提供 WebSocket功能;
Spring-Webmvc-Portlet: 提供 Portlet环境支持。
(5) 数据访问/集成 (Data Access/integration)
使用JDBC编写代码通常会导致大量的样板式代码,例如获得数据库连接、创建语句、处理结果集到最后关闭数据库连接。Spring的JDBC和DAO(Data Access Object)模块抽象了这些样板式代码,使我们的数据库代码变得简单明了,还可以避免因为关闭数据库资源失败而引发的问题。该模块在多种数据库服务的错误信息之上构建了一个语义丰富的异常层,以后我们再也不需要解释那些隐晦专有的SQL错误信息了!
对于那些更喜欢ORM(Object-Relational Mapping)工具而不愿意直接使用JDBC的开发者,Spring提供了ORM模块。Spring的ORM模块建立在对DAO的支持之上,并为多个ORM框架提供了一种构建DAO的简便方式。Spring没有尝试去创建自己的ORM解决方案,而是对许多流行的ORM框架进行了集成,包括Hibernate、Java Persisternce API、Java Data Object和iBATIS SQL Maps。Spring的事务管理支持所有的ORM框架以及JDBC。
Spring-JDBC: 提供以 JDBC访间数据库的支持;
Spnng-TX: 提供编程式和声明式的事务支持;
Spnng-ORM : 提供对对象/关系映射技术的支持;
Spring-OXM:提供对对象/xml映射技术的支持:
(6)Instrumentation
Spring的Instrumentation模块提供了为JVM添加代理(agent)的功能。具体来讲,它为Tomcat提供了一个织入代理,能够为Tomcat传递类文件,就像这些文件是被类加载器加载的一样。
Spring的发展史
Spring的历史网上有很多介绍, 从使用方式上来说大概就是这样几个阶段。
第一阶段: xml配置
在 spring1.x时代,使用 Spring开发满眼都是 xml配置的 Bean,随着项目的扩大,需要把 xml 配置文件分放到不同的配置文件里, 那时候需要频繁地在开发的类和配置文件之间切换。
第二阶段:注解配置
在 spring2.x时代,随着 JDK1.5带来的注解支持, Spring提供了声明 Bean的注解(如@Component、@Service),大大减少了配置量。这时 Spring圈子里存在着一种争论:注解配置和 xml配置究竟哪个更好?我们最终的选择是应用的基本配置(如数据库配置)用 xml,业务配置用注解。
第三阶段: Java配置
从 Spring3.x到现在, Spring提供了 Java配置的能力,使用 Java配置可以让你更理解你配置的 Bean。我们目前刚好处于这个时代, Spring4.x和 Spring Boot都推荐使用 Java配置。
Java配置是通过@Configuration和@Bean来实现的,可以完全替代 xml配置。
@Configuration声明当前类是一个配置类,相当于一个Spring配置的 xml文件。
@Bean注解在方法上,声明当前方法的返回值为一个 Bean。
何时使用 Java配置或者注解配置呢?我们主要的原则是:全局配置使用 Java配置(如数据库相关配置、 MVC相关配置),业务Bean的配置使用注解配置(@Service、@Component、@Repository、@Controlle)。
接下来的文章我也会按照这三个阶段进行说明
Spring框架特点
- 依赖注入
- AOP面向切面的编程,包括Spring的声明式事务管理
- Spring MVC和Spring WebFlux Web框架
- 对JDBC,JPA,JMS的基础支持
开始使用
官方推荐在项目中使用spring-framework的方法是使用依赖管理系统 - 下面的代码片段可以复制并粘贴到您的构建中。
maven:
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
</dependencies>
gradle:
dependencies {
compile 'org.springframework:spring-context:5.0.2.RELEASE'
}
参考:
http://yanln.iteye.com/blog/2191312