Spring
Spring是JVM(Java虚拟机)生态环境里一个提供应用开发需要用到的技术栈整合的框架,是一系列常用代码的抽象提取与整合,其最主要的应用场景就是Web开发
Spring应用场景(Web开发)
- Web请求路由
- HTTP请求解析
- Session管理
- MVC架框架
- 依赖注入
- ...
Spring Boot
Spring Boot是帮助我们快速使用Spring创建应用的工具和框架,是一个很好的学习Java Web App技术栈的平台,它把Spring开发中使用到的流程和工具集成在一起,然后boot使用
Spring Boot功能
- 快速开始使用Spring
- 构建应用 - REST API, WebSocket, Web, Streaming, Tasks, 等等
- 简化安全
- 对SQL和NoSQL的丰富支持
- 内嵌的运行时支持 - Tomcat, Jetty等
- 提高开发效率的工具
- 生产环境支持:跟踪,指标,监控
- 集成IDE
Hello World
Dependencies
要导入Spring框架和SpringBoot工具,IDEA的Maven项目中pom.xml配置文件如下:
4.0.0
com.wanzi
spring-sample
1.0-SNAPSHOT
org.springframework.boot
spring-boot-starter-parent
2.0.5.RELEASE
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
com.jayway.jsonpath
json-path
test
1.8
org.springframework.boot
spring-boot-maven-plugin
spring-releases
https://repo.spring.io/libs-release
spring-releases
https://repo.spring.io/libs-release
只要设置auto import dependencies,IDEA就可以在后台下载并处理好依赖,在Maven Project栏Plugins中出现Spring Boot
GreetingControler
- 定义Web请求的接收和处理
package hello;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.concurrent.atomic.AtomicLong;
// 告诉Spring,这是一个RESTful API 的 Controller
@RestController
public class GreetingController {
private static final String template = "Hello,%s!";
private final AtomicLong counter = new AtomicLong(); //原子操作,因为Spring默认是支持多线程的处理请求
// 当用户访问 /greeting 这个路径的时候,请Spring框架调用这个方法去执行相关逻辑
@RequestMapping("/greeting")
//value里的name是键名 //自动将类转换成json,并返回
public Greeting greeting(@RequestParam(value = "name", defaultValue = "World")String name) {
return new Greeting(counter.incrementAndGet(), String.format(template,name)); // counter += 1 ; return counter;
}
/*
// 直接输出String的方式
public String greeting(@RequestParam(value = "name", defaultValue = "World")String name) {
return String.format(template,name);
}
*/
}
功能:
1.接受用户的请求和用户输入:name
2.解析输入,然后给用户一个json的结构,里面就是Hello,(name)!
框架和库的关系大致如下:
1.框架 -- 框架负责调用你的代码
2.库 -- 我们去调用库的代码
Greeting
- 定义处理Web请求的结果对象
package hello;
// Spring会自动调用这两个参数的getter方法,去获得成员变量的值,然后构造一个json的返回结果
public class Greeting {
private final long id;
private final String content;
public Greeting(long id, String content) {
this.id = id;
this.content = content;
}
// 必须有get,Spring 默认调用有get方法的参数,转换成json
public long getId() {
return id;
}
public String getContent() {
return content;
}
}
Application
- 定义一个Spring程序的入口, Spring负责初始化Context
package hello;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication // 告诉Spring从这里启动,不可以省略
public class Application {
public static void main(String[] args){
// 启动Spring框架,把控制权交给Spring框架
SpringApplication.run(Application.class,args);
}
}
测试
1.点击Maven Project -> Plugins -> spring-boot -> spring-boot:run启动
2.启动成功后,打开浏览器,地址输入http://localhost:8080/greeting,输出为{"id":1,"content":"Hello,World!"}
3.地址输入http://localhost:8080/greeting?name=wanz,则输出为{"id":2,"content":"Hello,wanz!"},计数实现
4.把返回对象改为字符串而不是对象,则直接输出Hello,world!
层次结构
1.Spring 接受请求,解析请求
2.属于我们的代码 -- 随便写
3.可以读取数据库,做个爬虫
相当于:把结果返回给Spring,Spring再返回给用户