1.为什么学习Spring?

随着对Java EE的不断接触和理解,你会发现Spring  在各个企业和项目中发挥着越来越重要的作用。掌握Spring 已成为我们IT行业生存必学的本领之一。

  • Spring Framework 是一个开源的Java/Java EE全功能栈(full-stack)的应用程序框架,以Apache许可证形式发布,也有.NET平台上的移植版本。
  • 该框架基于 Expert One-on-One Java EE Design and Development(ISBN 0-7645-4385-7)一书中的代码,最初由Rod Johnson和Juergen Hoeller等开发。
  • Spring Framework提供了一个简易的开发方式,这种开发方式,将避免那些可能致使底层代码变得繁杂混乱的大量的属性文件和帮助类。

Spring Framework 当前最新版本是Spring Framework 5,当你打开官网,你应该能够看到官网的宣传图片

这里有个相关的新闻有兴趣可以看下,英文原版地址点击查看    中文版点击查看

根据官网动态和我所了解的信息来看,Spring 官网还会继续支持Spring MVC,因为它还有很多改进的地方。

但是未来的趋势我认为必将是  Spring Boot+ SpringWeb Flux + Spring Cloud.

那么Spring MVC 和 Spring Web Flux 两者有何区别呢?

官网对此给出了这样一张对比图:

翻译下就是:

  • Spring MVC基于servlet API构建,并使用一个同步阻塞I / O体系结构和一个单线程请求线程模型的Web 框架
  • Spring WebFlux是一个非阻塞的Web框架,从该组建立起,利用多核,下一代处理器和大量并发连接。

总结:

  • Spring MVC 是基于Servlet API 构建的同步阻塞式I/O 的Web 框架。
  • Spring WebFlux 是一种更优秀的非阻塞式Web框架,而且能更好处理大量并发连接。

看到这里,相信此时聪明的你应该晓得为什么我之前会那么说了吧。

2. Spring 官网介绍

上面这些链接相信很多人都知道,但是其实往往我们不是很清楚什么时候用哪个链接。

Spring 官网: 关注Spring 官网动态,最新的Spring 技术和版本发布公告

Spring 文档: what you want to do ? 你想开发一个什么样的项目?可以在这里快速找到相关介绍和文档。

Spring IDE:    如果你打算用Eclipse 版本,那么我推荐用 官网这个STS,因为它应该是最友好支持Spring的Eclipse 版本。当然,如果如果条件可以,我还是强烈推荐你使用Intellij Idea.

Spring Project: 这里是按照项目模块划分的,比如 从配置到安全,Web应用程序到大数据,想学习哪个就按照分类去学即可。

项目生成器:这里是Spring 官网提供的一个非常便利的工具,需要哪些依赖,哪个版本,在这里配置下然后下载即可。

3. Spring Framework

Spring Framework核心支持依赖注入,事务管理,Web应用程序,数据访问,消息传递,测试和更多

Tips:这里讲述的是翻译 https://projects.spring.io/spring-framework/  上面的内容

3.1 介绍

Spring框架为现代基于Java的企业应用程序提供了一个全面的编程和配置模型 - 在任何类型的部署平台上。

Spring的一个关键元素是应用程序级别的基础架构支持:Spring着重于企业应用程序的“管道”,以便团队可以专注于应用程序级业务逻辑,而不必与特定部署环境形成不必要的联系。

3.2 功能特点

  • 核心技术:依赖注入,事件,资源,i18n,验证,数据绑定,类型转换,SpEL,AOP。
  • 测试:模拟对象,TestContext框架,Spring MVC测试,WebTestClient。
  • 数据访问:事务,DAO支持,JDBC,ORM,编组XML。
  • Spring MVC和Spring WebFlux Web框架
  • 整合:远程处理,JMS,JCA,JMX,电子邮件,任务,调度,缓存。
  • 语言:Kotlin,Groovy,动态语言。

Tips: 这里加一张官网文档中的一个截图吧,相信有助于你更好地理解。

3.3 最低要求

  • JDK 8+ for Spring Framework 5.x
  • JDK 6+ for Spring Framework 4.x
  • JDK 5+ for Spring Framework 3.x

Tips: 所以你的电脑现在推荐使用 JDK1.8+

3.4 快速开始

在项目中开始使用spring-framework的推荐方法是使用依赖管理系统 - 下面的代码片段可以复制并粘贴到您的构建中。

需要帮忙? 请参阅我们有关使用 Maven和 Gradle 构建的入门指南。

其实不止Spring 官网我们如今的各大公司应该大多数也推荐我们是用Maven和Gradle 来管理项目Jar包依赖。

如果你使用的Maven:

<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId> spring-context</artifactId>
<version>5.1.0.BUILD-SNAPSHOT</version>
</dependency>
</dependencies><repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/libs-snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>

如果你是用的是Gradle

dependencies {
compile 'org.springframework: spring-context:5.1.0.BUILD-SNAPSHOT'
}repositories {
maven {
url 'https://repo.spring.io/libs-snapshot'
}
}

Tips: 其实我觉得Gradle应该是一种比Maven更先进的版本依赖管理工具,不过如今各大公司使用Gradle 似乎还不是很多,也许是与因为Eclipse 对Gradle 的支持还不够像Intellij Idea 那么完美吧。

Spring框架包含许多不同的模块。 这里我们展示了提供核心功能的spring-context。 有关其他选项,请参阅右侧的入门指南。

一旦你使用spring-context依赖关系设置你的构建,你就可以做到以下几点:

到这里后官网有些不详细,补充下。

方法一: 使用STS 工具构建这个带有Spring-context 上下文的项目

准备工作:

Tips: 下载的时候有个坑注意下,如果你的JDK是64位,默认直接下载的STS是32位,会出现这个错误。

所以下载的时候一定要下载JDK匹配的版本才行,移步:https://spring.io/tools/sts/all

这里下载完成后我们在我们的IDE空白处,右键——> New——> Other...

输入maven 搜索,选择Maven Project,创建一个Maven项目

选择默认的工作空间

选择默认的类型

输入项目基本信息后点击Finish 完成

然后我们应该可以看到这样的项目结构

首先修改pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.xingyun</groupId>
<artifactId>spring-context-sample</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>spring-context-sample</name>
<url>http://maven.apache.org</url> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId> spring-context</artifactId>
<version>5.1.0.BUILD-SNAPSHOT</version>
</dependency>
</dependencies> <repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/libs-snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories> </project>

创建文件

hello/MessageService.java

package com.xingyun.spring_context_sample.hello;

public interface MessageService {
String getMessage();
}

hello/MessagePrinter.java

package com.xingyun.spring_context_sample.hello;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; @Component
public class MessagePrinter {
final private MessageService service; @Autowired
public MessagePrinter(MessageService service) {
this.service = service;
} public void printMessage() {
System.out.println(this.service.getMessage());
}
}

Tips: 注意下这里有个注解不要忘了

App.java

package com.xingyun.spring_context_sample;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration; import com.xingyun.spring_context_sample.hello.MessagePrinter;
import com.xingyun.spring_context_sample.hello.MessageService; @Configuration
@ComponentScan
public class App
{
@Bean
MessageService mockMessageService() {
return new MessageService() {
public String getMessage() {
return "Hello World!";
}
};
}
public static void main( String[] args )
{
ApplicationContext context =
new AnnotationConfigApplicationContext(App.class);
MessagePrinter printer = context.getBean(MessagePrinter.class);
printer.printMessage();
}
}

Tips: 注意类上有两个注解和方法上有一个注解不要忘了,类的名字你可以改成官网上的Application 也可以保留默认的App名字也行。

创建成功后项目结构应该是这样

当然可能你会看着这种项目结构不舒服,那么你也可以选择改变下。

项目结构就变成了这种:

运行App.main() 主方法

项目源码下载:https://github.com/geekxingyun/JavaEE-Framework-Sample/tree/master/spring-context-sample


附录:核心Jar包依赖关系

Tips: 如果你不是写一个java web Application,那么将不需要spring-web 模块。

GroupId

ArtifactId

Description

org.springframework

spring-aop

Proxy-based AOP support

org.springframework

spring-aspects

AspectJ based aspects

org.springframework

spring-beans

Beans support, including Groovy

org.springframework

spring-context

Application context runtime, including scheduling and remoting abstractions

org.springframework

spring-context-support

Support classes for integrating common third-party libraries into a Spring application context

org.springframework

spring-core

Core utilities, used by many other Spring modules

org.springframework

spring-expression

Spring Expression Language (SpEL)

org.springframework

spring-instrument

Instrumentation agent for JVM bootstrapping

org.springframework

spring-instrument-tomcat

Instrumentation agent for Tomcat

org.springframework

spring-jdbc

JDBC support package, including DataSource setup and JDBC access support

org.springframework

spring-jms

JMS support package, including helper classes to send/receive JMS messages

org.springframework

spring-messaging

Support for messaging architectures and protocols

org.springframework

spring-orm

Object/Relational Mapping, including JPA and Hibernate support

org.springframework

spring-oxm

Object/XML Mapping

org.springframework

spring-test

Support for unit testing and integration testing Spring components

org.springframework

spring-tx

Transaction infrastructure, including DAO support and JCA integration

org.springframework

spring-web

Foundational web support, including web client and web-based remoting

org.springframework

spring-webmvc

HTTP-based Model-View-Controller and REST endpoints for Servlet stacks

org.springframework

spring-webmvc-portlet

MVC implementation to be used in a Portlet environment

org.springframework

spring-websocket

WebSocket and SockJS infrastructure, including STOMP messaging support

1.Spring Framework 5.0 入门篇的更多相关文章

  1. Entity Framework 6.0 入门系列 第一篇

    Entity Framework 6.0 入门系列 第一篇 好几年前接触过一些ef感觉不是很好用,废弃.但是 Entity Framework 6.0是经过几个版本优化过的产物,性能和功能不断完善,开 ...

  2. Spring Boot 2.0 入门指南

    0x01 什么是Spring Boot? Spring Boot是用来简化Spring应用初始搭建以及开发过程的全新框架,被认为是Spring MVC的“接班人”,和微服务紧密联系在一起. 0x02 ...

  3. spring boot(一):入门篇

    构建微服务:Spring boot 入门篇 什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...

  4. Spring Framework 4.0.0发布,首次支持Java 8

    Spring项目组今天发布了Spring 框架4.0.0版本.Spring是一个开源的轻量级Java SE和Java EE开发应用框架,其目的是用于简化企业级应用程序开发. Spring框架第一个版本 ...

  5. spring 官方下载地址(Spring Framework 3.2.x&Spring Framework 4.0.x)

    spring官方网站改版后,建议都是通过 Maven和Gradle下载,对不使用Maven和Gradle开发项目的,下载就非常麻烦,下给出Spring Framework jar官方直接下载路径: h ...

  6. Spring Framework 5.0 新特性

    Spring Framework 5.0是在Spring Framework 4.0之后将近四年内一次重大的升级. 在这个时间框架内,主要的发展之一就是Spring Boot项目的演变. Spring ...

  7. Spring Boot(一):入门篇+前端访问后端

    转自:Spring Boot(一):入门篇 什么是Spring Boot Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发 ...

  8. Spring+Velocity(平台升级至Spring Framework 5.0.2)

    下载: http://repo.spring.io/release/org/springframework/spring/ Dear Spring community, I’m pleased to ...

  9. [转]spring 官方下载地址(Spring Framework 3.2.x&Spring Framework 4.0.x)

    SPRING官方网站改版后,建议都是通过 Maven和Gradle下载,对不使用Maven和Gradle开发项目的,下载就非常麻烦,下给出Spring Framework jar官方直接下载路径: h ...

随机推荐

  1. ANDROID框架结构和介绍

    下图是ANDROID4.4 版本包含的所有系统服务.本地服务和应用的框架图,组织为三层:应用层.系统服务层.本地进程和服务层.应用层通常通过服务提供的对外API接口(一个服务管理对象)与服务交互,系统 ...

  2. Mina源码阅读笔记(二)- IoBuffer的封装

    在阅读IoBuffer源码之前,我们先看Mina对IoBuffer的描述:A byte buffer used by MINA applications. This is a replacement ...

  3. CRM客户关系管理系统(十二)

    十二章.学员报名流程开发 2  12.1.学员报名合同和证件信息上传 功能: 必须勾选报名合同协议 必须上传个人证件信息 最多只能上传三个文件 文件大小2M以内 列出已上传文件 (1)crm/urls ...

  4. JS (全局作用域)

    一.全局函数作用域(把变量的声明和函数的声明放在前面) 作用域(scope):一条数据可以在哪个范围中使用. 通常来说,一段程序代码中所用到的数据并不总是有效/可用的,而限定这个数据的可用性的代码范围 ...

  5. Implement int sqrt(int x).

    自己设计函数,实现求根号.x是非负整数. Input: 8 Output: 2 当开出根号后有小数,则省略小数部分.. 思路:只要找到一个数a,a*a<=x而且(a+1)*(a+1)>x, ...

  6. Web服务器Tomcat集群与负载均衡技术

    我们曾经介绍过三种Tomcat集群方式的优缺点分析.本文将介绍Tomcat集群与负载均衡技术具体实施过程. 在进入集群系统架构探讨之前,先定义一些专门术语: 1. 集群(Cluster):是一组独立的 ...

  7. spring:org.springframework.web.servlet.DispatcherServlet noHandlerFound解决方法

    1.搜了许久: <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern& ...

  8. Day9 基于TCP的套接字和基于UDP的套接字

    服务端: ss=socket() #创建服务器套接字 ss.bind() #把地址绑定到套接字 ss.listen() #监听套接字, inf_loop: #服务器无限循环 cs=ss.accept( ...

  9. Day2_元组_字典_集合_字符编码_文件处理

    元组: 作用:存多个值,元组不可变,主要用来读 age=(11,22,33,44,55) print(age[2]) #取出元组内的值 print(age[1:4]) #取出元组内的某些值 print ...

  10. MLDS笔记:Generalization

    1 泛化能力 用VC维来衡量一个模型的表达能力,比如2维线性模型的VC维为3. 在图1-2中,随便给啥训练数据该model都能learn起来. 从理论上来看,当2个model在训练数据上表现一样时,为 ...