认识 Spring 框架
Spring 框架是 Java 应用最广的框架,它的成功来源于理念,而不是技术本身,它的理念包括 IoC (Inversion of Control,控制反转) 和 AOP(Aspect Oriented Programming,面向切面编程)。
什么是 Spring:
- Spring 是一个轻量级的 DI / IoC 和 AOP 容器的开源框架,来源于 Rod Johnson 在其著作《Expert one on one J2EE design and development》中阐述的部分理念和原型衍生而来。
- Spring 提倡以“最少侵入”的方式来管理应用中的代码,这意味着我们可以随时安装或者卸载 Spring
- 适用范围:任何 Java 应用
- Spring 的根本使命:简化 Java 开发
Spring技术栈:(下图来源与Spring官方网站) https://spring.io/
1)Spring 在Eclipse的eclipse插件的使用:
2)运行eclipseec.exe文件即可
首先创建一个简单的项目:打开eclipse->File->New->Spring Start Project
创建完毕后稍等一段时间,如果下载很慢可以换一下Mavan的镜像地址下载(推荐使用阿里的镜像)
下一篇博客会讲解一下如何配置Mavan和更换镜像
3)创建一个测试样例:
操作流程:
1)首先等完全安装完毕后如图所示(有一些是自己创建的)
2)我们首先在static静态下面创建HTML文件
3)使用127.0.0.1:8080/index.html即可访问index.html的静态页面
上面只是一个最简单的测试,其实只是测试了静态页面,还没有真的测试Spring
Spring学习从这里开始:
首先我们在学习之前了解一下常用的注解:(下面会用到,也是Spring中经常用到的)
Spring也是基于反射机制实现的,反射机制后面会写博客总结
- @Text:用于测试
- @Controller:用于标注控制器类
- @GetMapping:用于指定映射的路径,用于标注Get请求调用的方法;eg:(@GetMapping("/")映射到根目录)
- @PostMapping:用于指定映射的路径,用于标注Get请求调用的方法;eg:(@GetMapping("/staff")映射到/staff目录)
- @ResponseBody:用于标注方法返回的是数据而不是路径,例如:一个方法只标明了GetMapping映射,而没有标ResponseBody,默认返回的为资源的路径而不是数据
- @PathVariable:通过路径名获得参数:Mapping标注:@GetMapping("/user/{name}")其中name就是路径中的参数,可以通过标PathVariable,从路径中拿到name的值
- @RequestMapping:通过这个注解标记的类,类中的方法不需要标记@ResponseBody,也返回数据而不是路径
- @RequestBody:请求体为数据
- @DeleteMapping:执行删除操作,删除当前url传的值
- @RequestParam:设置请求参数,Spring会根据参数名自动匹配包装,若参数直接是一个对象,则Spring会自动为对象赋值
- @PutMapping:用于Put方法使用,(Put方法主要用于js实现异步时发送的请求)
HomeController控制器:
package com.example.demo;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HomeController {
/**
* 当你访问get的时候返回静态资源的一个路径
* @return
*/
@GetMapping("/")
public String home() {
return "home.html";
}
/**
* 返回数据,不是资源路径
* @return
*/
@ResponseBody
@GetMapping("/hello")
public String hello(
@RequestParam("n") String name,
@RequestParam("a") int a,
@RequestParam("b") int b
) {
System.out.println("a:"+a);
System.out.println("b:"+b);
//返回的是数据而不是路径
return "你好:"+name;
}
//从请求对象获得参数信息并自动类型转换和对象的封装
@PostMapping("/staff")
@ResponseBody
public Staff foo(Staff staff) {
return staff;
}
@GetMapping("/user/{name}")
@ResponseBody
public String user(
@PathVariable String name) {
return "user"+name;
}
}
Staff Java Bean
package com.example.demo;
public class Staff {
String name;
int age;
String phone;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public String toString() {
return "Staff [name=" + name + ", age=" + age + ", phone=" + phone + "]";
}
}
总结一下:
- Spring会从请求对象自动获得类型转换的封装
- 标记@ResponseBody注解的返回的是数据而不是路径
- 切记Post和Get方法不要搞错了
- 没有写@Controller的类不会被认为是控制器(需要注意,不要遗漏)
- 当类型为字符串类型时会直接返回字符串,但是当方法返回类型为对象时会自动序列化为Json格式字符串返回
package com.example.demo;
import java.util.List;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/u")
public class userController {
//Get /u
@GetMapping
public List<User> list(){
return null;
}
// PUT /u/123
public String update(
@PathVariable int id,
@RequestBody User u) {
return null;
}
//DELETE /u/1234
@DeleteMapping("/{id}")
public String remove(int id) {
return null;
}
//Post /u
@PostMapping
public String add(User u) {
return "";
}
//Get /u/{name}
@GetMapping("/{name}")
public User load(
@PathVariable String name) {
return null;
}
}
总结一下:
- @RequestMapping注解:用于将一个类映射到一个路径下面,eg:@RequestMapping("/u")将整个类映射在了/u下面
- @DeleteMapping:用于删除;eg:@DeleteMapping("/{id}")用于删除参数id所对应的值
- @PutMapping:主要是js发送的异步请求(method一般发送Post请求,页面直接请求一般为Get请求)
下一次总结一下Spring对数据库的操作