Spring学习之快速入门

认识 Spring 框架

Spring 框架是 Java 应用最广的框架,它的成功来源于理念,而不是技术本身,它的理念包括 IoC (Inversion of Control,控制反转) 和 AOP(Aspect Oriented Programming,面向切面编程)

什么是 Spring:

  1. Spring 是一个轻量级的 DI / IoC 和 AOP 容器的开源框架,来源于 Rod Johnson 在其著作《Expert one on one J2EE design and development》中阐述的部分理念和原型衍生而来。
  2. Spring 提倡以“最少侵入”的方式来管理应用中的代码,这意味着我们可以随时安装或者卸载 Spring
  • 适用范围:任何 Java 应用
  • Spring 的根本使命:简化 Java 开发

Spring技术栈:(下图来源与Spring官方网站)    https://spring.io/

1)Spring 在Eclipse的eclipse插件的使用:

点击下载Spring插件

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对数据库的操作

猜你喜欢

转载自www.cnblogs.com/PoorGuy/p/10269768.html