Spring Framework

Spring Framework Overview

history, design philosophy, feedback, getting started.html

Version 5.1.7.RELEASEjava

Spring使得能够很容易的建立Java企业应用。在一个企业环境中,他彻底使用Java语言提供你须要的全部东西,而且也支持基于JVM的Groovy和Kotlin,同时能够根据应用须要灵活的建立多种多样的架构设计。从Spring Framework 5.1开始,Spring须要JDK8+(Java SE 8+),并为JDK11 LTS提供开箱即用的支持。git

1. What We Mean by "Spring"

“Spring”这个词在不一样的语境中有不一样的意思,最初,它能够被用来指Spring Framework 项目自己。以后其余的一些Spring 项目基于Spring Framework 建立。一般,你们说“Spring”是指整个Spring家族。这个参考文档专一于这些的基础:Spring Framework 。
Spring Framework 划分为多个模块。应用能够选择须要的模块。这些模块的核心是core容器,包括配置模型和依赖注入的机制。除此以外,Spring为不一样的应用架构提供了基础支持,包括消息,事务数据和持久化,Web。它也提供了基于Servlet的Spring MVC框架,并平行的提供Spring WebFlux响应式Web框架。github

Spring的框架包能够基于JDK 9的模块路径("Jigsaw")构建。Spring Framework 5 的jar包使用"Automatic-Module-Name" 声明项,声明项根据固定的语法的模块名("spring.core", "spring.context" 等等) 而不是jar文件名(jar文件遵循一样的命名模式,只是单词链接使用“-”而不是“.",好比"spring-core" and "spring-context")。固然Spring的框架包依然能够正常使用JDK8和JDK9+基于classpath的方式web

2.History Of Spring and the Spring Framework

Spring起始于2003的一个对于早期J2EE规范的回复.然而一些观点认为Java EE 和Spring是竞争关系,Spring其实是Java EE的补充。Spring 编程设计并无遵循Java EE平台规范,确切的说,它当心的选择了一下Java EE下的独立的规范:spring

  • Servlet API (JSR 340)编程

  • WebSocket API (JSR 356)api

  • Concurrency Utilities (JSR 236)服务器

  • JSON Binding API (JSR 367)架构

  • Bean Validation (JSR 303)

  • JPA (JSR 338)

  • JMS (JSR 914)

  • 以及在须要的状况下提供JTA/JCA的事务协做设置

Spring Framework 也支持应用开发者使用依赖注入 (JSR 330)和通用注解(JSR250)规范来替换由Spring Framework提供的Spring定义的机制,从Spring Framework 5.0开始,Spring的最低版本是Java EE 7 (相应的其余规范好比Servlet 3.1+,JPA2.1+),同时提供了了集成在Java EE 8 (相应的其余规范好比Servlet4.0,JSON Binding API)上的新API的运行时支持。这使得Spring彻底兼容好比Tomcat 8 和9,WebSphere 9 和 JBoss EAP 7.

随着时间的过去,应用开发中的Java EE规则也已经进行了改进,在Java EE 和 Spring 的早期时候,应用的完成须要依赖于应用服务器。如今,由于有了 Spring Boot,应用只须要很小的改动就能够以一个Devops 和云友好的方式使用内置的 Servlet 容器。从Spring Framework 5开始,WebFlux甚至不须要直接使用Servlet API而且运行在没有Servlet 容器的服务器上Spring在不断地创新和发展。Spring Framework以外还有 Spring Boot, Spring Security, Spring Data, Spring Cloud, Spring Batch等等的一些项目。须要注意的是每一个项目都有各自的源码资源,问题追踪和发布节奏,点击spring.io/projects 查看Spring项目完整列表

4.0 Feedback and Contributions

对于如何使用的问题,以及判断或调试的问题,咱们推荐使用 StackOverflow,而且咱们也有一个用来记录建议标签的问题页,若是您肯定了一个SpringFramework中的问题,或者想要提供一个特性,请使用GitHub Issues
若是您有解决方案或建议的解决方案,能够在Github上提交拉取请求。 可是,请注意对于除最琐碎的问题之外的全部问题,咱们但愿在问题跟踪器中记录故障单,在该跟踪器中进行讨论并保留记录以备未来参考。
有关更多详细信息,请参阅贡献顶级项目页面上的准则。

5.Getting Started

若是你刚开始使用Spring,你能够能但愿从一个基于Spring Boot的应用开始使用Spring Framework.Spring Boot 提供了一个快捷和固定的方式去建立一个基于Spring的生产就绪状态的应用.它基于Spring Framework,相比配置更倾向于约定的旨在使你尽快起步和运行》
你可使用start.spring.io来建立一个基本的项目或者跟着"Getting Started" guides其中的一个作,好比开始建立一个Restful Web Service.为了容易理解,这些引导文档更关注于引导如何建立,而且大部分都是基于Spring Boot.它们也包含了一些当你解决一个特定问题时可能考虑用到的Spring家族的其余项目.









Core Technologies

核心技术

IoC Container, Events, Resources, i18n, Validation, Data Binding, Type Conversion, SpEL, AOP.

Version 5.1.7.RELEASE

这部分的参考文档覆盖了Spring Framework全部的必不可少的技术

1.IoC Container

这一章是关于Spring的控制反转(IoC)容器的。

1.1 Introduction to the Spring IoC Container and Beans

这一章是关于Spring Framework对于控制反转(Ioc)规范的实现。IoC也被称为依赖注入(DI)。它是一个在构造以后或者工厂方法返回值后对象决定他们的依赖值经过构造器参数,工厂方法参数或者设置在对象实例上的参数的处理形式。容器在建立这些bean以后会注入到对象的依赖.这种处理方式从根本上是bean直接经过类的构造或者好比服务定位器模式的机制控制bean自己实例化或者bean依赖的定义的方式的反转(所以被称为依赖反转)

org.springframework.beans 和 org.springframework.context 包是Spring Framework IoC容器的基础。BeanFactory接口提供了一个能够管理任意对象类型的高级配置机制。ApplicationContext 是BeanFactory的一个子接口,它增长了:

  • 集成了Spring AOP 特性
  • 消息资源管理(针对国际化的用户)
  • 事件发布
  • 对于Web应用用户应用层特有的上下文WebApplicationContext

简单的说,BeanFactory 提供了配置框架和基础特性,ApplicationContext添加了一些针对企业的特性.ApplicationContext是BeanFactory的完整的超集因此在本章关于Spring IoC容器的讲解中只使用ApplicationContext.得到关于BeanFactory的更多信息,seeThe BeanFactory
在Spring中,主要构成应用的对象被Spring IoC容器所管理,被称为bean。一个bean是已经实例化,已经组合过的而且被Spring IoC管理的对象。实际上,一个bean只是应用中众多对象中简单的一个。Bean以及他们的依赖都是容器使用配置元数据反射获得的。

1.2 Container Overview

org.springframework.context.ApplicationContext 接口便是指IoC容器,它负责实例化,配置,和组合bean.容器经过读取配置元数据得到去实例化,配置和组合什么对象的指引。配置元数据具体是指XML,Java注解或者Java代码。它可让你描述那些组成应用的对象和他们之间的完整的互相依赖关系。

Spring提供了几个继承自ApplicationContext的接口,在独立的应用中,一般建立一个ClassPathXMLApplicationContext或者FileSystemXMLApplicationContext.虽然XML是定义配置元数据的传统格式,你也能够经过少许XML配置去声明开启额外的元数据格式使得容器使用Java注解或者代码做为元数据格式。

在大多数应用场景中,用户没必要要显性的编写代码来实例化一个Spring容器的一些实例。例如,在Web应用场景中,一般须要在应用的web.xml文件中添加简单的大约8行的模板web标识符XML(see Convenient ApplicationContext Instantiation for Web Applications).若是你使用Spring Tool Suite(一个基于Eclipse的开发环境),你能够简单的经过点按几下鼠标或键盘来建立这些模板。

下图展现了Spring如何工做的一个高层的视角.首先你的应用中的类经过配置元数据组合,而后在ApplicationContext被建立和初始化后,你就有了一个完整配置过和可执行的系统或应用。

Figure 1. The Spring IoC container

Figure 1. The Spring IoC container

1.2.1 Configuration Metadata

如前图所展现的同样,Spring IoC 容器 消费 消费这个词相似于生产者消费者模式中的消费者消费的概念了一份配置元数据,这个配置元数据描述了做为一个应用开发者的你告诉Spring 容器若是去实例化,配置和组合你应用中的对象。

配置元数据传统的方式是用简单和直观的XML格式,这一章大部分也使用XML格式来表现Spring IoC 容器的概念和特性。

基于XML的元数据并非配置元数据能够接收的惟一格式,Spring IoC容器自己与元数据的编写方式是解耦的。如今,不少开发者为他们的Spring应用选择了使用基于Java注解的方式

获取更多关于为Spring 容器使用其余格式的信息,请看:

  • 基于注解配置:Spring 2.5提出了基于注解配置元数据的支持
  • 基于Java配置:从Spring3.0开始,不少Spring JavaConfig项目提出的特性变成了核心Spring Framework的一部分。所以你可使用Java 在应用里类的外面定义bean的方式而不是XML文件的方式。要使用这些新的特性,请看@Configuration,@Bean,@Import,和@DependsOn注解

Spring 配置 包括了容器必须管理的至少一个,实际上超过一个的bean。基于XML配置元数据经过顶级元素 下的 元素配置这些bean。Java配置一般使用@Bean,直接在一个@Configuration类里面的方法上。

这些bean的定义与组成你应用的实际对象相一致。一般,你定义service层对象,数据访问对象(DAOs,data access objects),好比Struts Action实例的展现对象,好比Hibernate SessionFactories的基础对象。JMS队列等等。一般,不为容器中的领域对象进行细粒度配置,由于一般是DAO和业务逻辑负责建立和使用领域对象。不过你可使用让Spring集成AspectJ来配置已经在IoC容器以外建立的对象。请看Using AspetJ to dependency-inject domain objects with Spring.

下面例子展现了基于XML配置元数据的基本结构:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="..." class="...">
        <!-- collaborators and configuration for this bean go here -->
    </bean>

    <bean id="..." class="...">
        <!-- collaborators and configuration for this bean go here -->
    </bean>

    <!-- more bean definitions go here -->

</beans>

id 属性标识每一个bean定义的字符串。
class 属性定义了bean的类型,须要使用彻底限定类名。

id 属性的值指向协做对象,引用写做对象的XML没有展现在例子中,请看Dependencies获取更多信息。

1.2.2 Instantiating a Container

提供给ApplicationContext构造器的定位路径是一些让容器经过多种形式的外部资源载入的资源字符串。好比一个本地文件系统路径,Java CLASSPATH路径等等

ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");

学习过Spring的IoC容器后,你可能但愿知道更多关于Spring的

相关文章
相关标签/搜索