欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Spring Framework

程序员文章站 2022-06-11 16:49:12
Spring Framework Overview history, design philosophy, feedback, getting started. Version 5.1.7.RELEASE Spring使得可以很容易的创建Java企业应用。在一个企业环境中,他完全使用Java语言提供 ......

spring framework overview

history, design philosophy, feedback, getting started.

version 5.1.7.release

spring使得可以很容易的创建java企业应用。在一个企业环境中,他完全使用java语言提供你需要的所有东西,并且也支持基于jvm的groovy和kotlin,同时可以根据应用需要灵活的创建多种多样的架构设计。从spring framework 5.1开始,spring需要jdk8+(java se 8+),并为jdk11 lts提供开箱即用的支持。

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框架。

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的方式

2.history of spring and the spring framework

spring起始于2003的一个对于早期j2ee规范的回复.然而一些观点认为java ee 和spring是竞争关系,spring实际上是java ee的补充。spring 编程设计并没有遵循java ee平台规范,确切的说,它小心的选择了一下java ee下的独立的规范:

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项目完整列表

4.0 feedback and contributions

对于如何使用的问题,以及判断或调试的问题,我们推荐使用 *,并且我们也有一个用来记录建议标签的,如果您确定了一个springframework中的问题,或者想要提供一个特性,请使用github issues
如果您有解决方案或建议的解决方案,可以在github上提交拉取请求。 但是,请注意对于除最琐碎的问题以外的所有问题,我们希望在问题跟踪器中记录故障单,在该跟踪器中进行讨论并保留记录以备将来参考。
有关更多详细信息,请参阅贡献*项目页面上的准则。

5.getting started

如果你刚开始使用spring,你可以能希望从一个基于spring boot的应用开始使用spring framework.spring boot 提供了一个快捷和固定的方式去创建一个基于spring的生产就绪状态的应用.它基于spring framework,相比配置更倾向于约定的旨在使你尽快起步和运行》
你可以使用来创建一个基本的项目或者跟着"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被创建和初始化后,你就有了一个完整配置过和可执行的系统或应用。

Spring Framework

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的