记录在听黑马课的时候的笔记以及课堂上练习的代码,文章图源于我在听课的时候所截的屏,所以有些不清晰,请见谅。下面是课程链接,可点击自行跳转。
目录
入门
SpringBoot快速入门





快速入门:
java
package com.jianglin.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class helloController {
@RequestMapping("/hello")
public String hello(){
System.out.println("hello");
System.out.println("Love yourself and love what you love");
return "hello";
}
}
HTTP协议
概述

请求协议


响应协议


|-----|---------------------------------|---------------------------------------------------------|
| 状态码 | 英文描述 | 解释 |
| 200 | OK | 客户端请求成功,即处理成功,这是我们最想看到的状态码 |
| 302 | Found | 指示所请求的资源已移动到由Location响应头给定的 URL,浏览器会自动重新访问到这个页面 |
| 304 | Not Modified | 告诉客户端,你请求的资源至上一次取得后,服务端并未更改,你直接用你本地缓存吧。隐式重定向 |
| 400 | Bad Request | 客户端请求有语法错误,不能被服务器所理解 |
| 403 | Forbidden | 服务器收到请求,但是拒绝提供服务,比如:没有权限访问相关资源 |
| 404 | Not Found | 请求资源不存在,一般是URL输入有误,或者网站资源被删除了 |
| 405 | Method Not Allowed | 请求方式有误,比如应该用GET请求方式的资源,用了POST |
| 428 | Precondition Required | 服务器要求有条件的请求,告诉客户端要想访问该资源,必须携带特定的请求头 |
| 429 | Too Many Requests | 指示用户在给定时间内发送了太多请求("限速"),配合Retry-After(多长时间后可以请求)响应头一起使用 |
| 431 | Request Header Fields Too Large | 请求头太大,服务器不愿意处理请求,因为它的头部字段太大。请求可以在减少请求头域的大小后重新提交。 |
| 500 | Internal Server Error | 服务器发生不可预期的错误。服务器出异常了,赶紧看日志去吧 |
| 503 | Service Unavailable | 服务器尚未准备好处理请求,服务器刚刚启动,还未初始化好 |
状态码大全:https://cloud.tencent.com/developer/chapter/13553


协议解析

Tomcat
介绍


基本使用





入门程序解析



请求响应
概述


postman工具



简单参数&实体参数
简单参数

利用Servlet实现:
java
package com.jianglin.controller;
import org.apache.coyote.Request;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
@RestController
public class requestController {
@RequestMapping("/simpleParam")
public String simpleParam(HttpServletRequest request) {
String name = request.getParameter("name");
String age = request.getParameter("age");
return "hello " + name + " " + age;
}
}


springboot实现:
java
package com.jianglin.controller;
import org.apache.coyote.Request;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
@RestController
public class requestController {
// @RequestMapping("/simpleParam")
// public String simpleParam(HttpServletRequest request) {
// String name = request.getParameter("name");
// String age = request.getParameter("age");
// return "hello " + name + " " + age;
// }
@RequestMapping("/simpleParam")
public String simpleParam(String name,Integer age) {
return "hello " + name + " " + age;
}
}

当方法形参名称与请求参数名称不匹配,利用注解完成映射:
java
package com.jianglin.controller;
import com.sun.org.glassfish.gmbal.ParameterNames;
import org.apache.coyote.Request;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
@RestController
public class requestController {
// @RequestMapping("/simpleParam")
// public String simpleParam(HttpServletRequest request) {
// String name = request.getParameter("name");
// String age = request.getParameter("age");
// return "hello " + name + " " + age;
// }
// @RequestMapping("/simpleParam")
// public String simpleParam(String name,Integer age) {
// return "hello " + name + " " + age;
// }
@RequestMapping("/simpleParam")
public String simpleParam(@RequestParam(name = "name",required = false) String username, Integer age) {
return "hello " + username + " " + age;
}
}

实体参数


复杂实体参数实现:
java
package com.jianglin.controller;
import com.jianglin.pojo.User;
import com.sun.org.glassfish.gmbal.ParameterNames;
import org.apache.coyote.Request;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
@RestController
public class requestController {
// @RequestMapping("/simpleParam")
// public String simpleParam(HttpServletRequest request) {
// String name = request.getParameter("name");
// String age = request.getParameter("age");
// return "hello " + name + " " + age;
// }
// @RequestMapping("/simpleParam")
// public String simpleParam(String name,Integer age) {
// return "hello " + name + " " + age;
// }
@RequestMapping("/simpleParam")
public String simpleParam(@RequestParam(name = "name",required = false) String username, Integer age) {
return "hello " + username + " " + age;
}
//实体对象
@RequestMapping("/simplePojo")
public String simplePojo(User user) {
return user.toString();
}
//复杂实体对象
@RequestMapping("/complexPojo")
public String complexPojo(User user) {
return user.toString();
}
}

数组集合参数
数组参数

数组参数:
java
package com.jianglin.controller;
import com.jianglin.pojo.User;
import com.sun.org.glassfish.gmbal.ParameterNames;
import org.apache.coyote.Request;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
@RestController
public class requestController {
// @RequestMapping("/simpleParam")
// public String simpleParam(HttpServletRequest request) {
// String name = request.getParameter("name");
// String age = request.getParameter("age");
// return "hello " + name + " " + age;
// }
// @RequestMapping("/simpleParam")
// public String simpleParam(String name,Integer age) {
// return "hello " + name + " " + age;
// }
@RequestMapping("/simpleParam")
public String simpleParam(@RequestParam(name = "name",required = false) String username, Integer age) {
return "hello " + username + " " + age;
}
//实体对象
@RequestMapping("/simplePojo")
public String simplePojo(User user) {
return user.toString();
}
//复杂实体对象
@RequestMapping("/complexPojo")
public String complexPojo(User user) {
return user.toString();
}
//数组集合参数
@RequestMapping("/arrayParam")
public String arrayParam(String[] hobby) {
return Arrays.toString(hobby);
}
}

集合参数

集合参数:
java
package com.jianglin.controller;
import com.jianglin.pojo.User;
import com.sun.org.glassfish.gmbal.ParameterNames;
import org.apache.coyote.Request;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
import java.util.List;
@RestController
public class requestController {
// @RequestMapping("/simpleParam")
// public String simpleParam(HttpServletRequest request) {
// String name = request.getParameter("name");
// String age = request.getParameter("age");
// return "hello " + name + " " + age;
// }
// @RequestMapping("/simpleParam")
// public String simpleParam(String name,Integer age) {
// return "hello " + name + " " + age;
// }
@RequestMapping("/simpleParam")
public String simpleParam(@RequestParam(name = "name",required = false) String username, Integer age) {
return "hello " + username + " " + age;
}
//实体对象
@RequestMapping("/simplePojo")
public String simplePojo(User user) {
return user.toString();
}
//复杂实体对象
@RequestMapping("/complexPojo")
public String complexPojo(User user) {
return user.toString();
}
//数组参数
@RequestMapping("/arrayParam")
public String arrayParam(String[] hobby) {
return Arrays.toString(hobby);
}
//集合参数
@RequestMapping("/listParam")
public String listParam(@RequestParam List<String> hobby) {
return hobby.toString();
}
}


日期参数&JSON参数
日期时间参数

日期时间参数:
java
package com.jianglin.controller;
import com.jianglin.pojo.User;
import com.sun.org.glassfish.gmbal.ParameterNames;
import org.apache.coyote.Request;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;
@RestController
public class requestController {
// @RequestMapping("/simpleParam")
// public String simpleParam(HttpServletRequest request) {
// String name = request.getParameter("name");
// String age = request.getParameter("age");
// return "hello " + name + " " + age;
// }
// @RequestMapping("/simpleParam")
// public String simpleParam(String name,Integer age) {
// return "hello " + name + " " + age;
// }
@RequestMapping("/simpleParam")
public String simpleParam(@RequestParam(name = "name",required = false) String username, Integer age) {
return "hello " + username + " " + age;
}
//实体对象
@RequestMapping("/simplePojo")
public String simplePojo(User user) {
return user.toString();
}
//复杂实体对象
@RequestMapping("/complexPojo")
public String complexPojo(User user) {
return user.toString();
}
//数组参数
@RequestMapping("/arrayParam")
public String arrayParam(String[] hobby) {
return Arrays.toString(hobby);
}
//集合参数
@RequestMapping("/listParam")
public String listParam(@RequestParam List<String> hobby) {
return hobby.toString();
}
//日期时间参数
@RequestMapping("/dateParam")
public String dateParam(@DateTimeFormat(pattern = "yyyy-mm-dd HH:mm:ss") LocalDateTime date) {
return date.toString();
}
}

JSON参数

JSON参数:
java
package com.jianglin.controller;
import com.jianglin.pojo.User;
import com.sun.org.glassfish.gmbal.ParameterNames;
import org.apache.coyote.Request;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;
@RestController
public class requestController {
// @RequestMapping("/simpleParam")
// public String simpleParam(HttpServletRequest request) {
// String name = request.getParameter("name");
// String age = request.getParameter("age");
// return "hello " + name + " " + age;
// }
// @RequestMapping("/simpleParam")
// public String simpleParam(String name,Integer age) {
// return "hello " + name + " " + age;
// }
@RequestMapping("/simpleParam")
public String simpleParam(@RequestParam(name = "name",required = false) String username, Integer age) {
return "hello " + username + " " + age;
}
//实体对象
@RequestMapping("/simplePojo")
public String simplePojo(User user) {
return user.toString();
}
//复杂实体对象
@RequestMapping("/complexPojo")
public String complexPojo(User user) {
return user.toString();
}
//数组参数
@RequestMapping("/arrayParam")
public String arrayParam(String[] hobby) {
return Arrays.toString(hobby);
}
//集合参数
@RequestMapping("/listParam")
public String listParam(@RequestParam List<String> hobby) {
return hobby.toString();
}
//日期时间参数
@RequestMapping("/dateParam")
public String dateParam(@DateTimeFormat(pattern = "yyyy-mm-dd HH:mm:ss") LocalDateTime date) {
return date.toString();
}
//JSON参数
@RequestMapping("/jsonParam")
public String jsonParam(@RequestBody User user) {
return user.toString();
}
}

路径参数

路径参数实现:
java
package com.jianglin.controller;
import com.jianglin.pojo.User;
import com.sun.org.glassfish.gmbal.ParameterNames;
import org.apache.coyote.Request;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;
@RestController
public class requestController {
// @RequestMapping("/simpleParam")
// public String simpleParam(HttpServletRequest request) {
// String name = request.getParameter("name");
// String age = request.getParameter("age");
// return "hello " + name + " " + age;
// }
// @RequestMapping("/simpleParam")
// public String simpleParam(String name,Integer age) {
// return "hello " + name + " " + age;
// }
@RequestMapping("/simpleParam")
public String simpleParam(@RequestParam(name = "name",required = false) String username, Integer age) {
return "hello " + username + " " + age;
}
//实体对象
@RequestMapping("/simplePojo")
public String simplePojo(User user) {
return user.toString();
}
//复杂实体对象
@RequestMapping("/complexPojo")
public String complexPojo(User user) {
return user.toString();
}
//数组参数
@RequestMapping("/arrayParam")
public String arrayParam(String[] hobby) {
return Arrays.toString(hobby);
}
//集合参数
@RequestMapping("/listParam")
public String listParam(@RequestParam List<String> hobby) {
return hobby.toString();
}
//日期时间参数
@RequestMapping("/dateParam")
public String dateParam(@DateTimeFormat(pattern = "yyyy-mm-dd HH:mm:ss") LocalDateTime date) {
return date.toString();
}
//JSON参数
@RequestMapping("/jsonParam")
public String jsonParam(@RequestBody User user) {
return user.toString();
}
//路径参数
@RequestMapping("/pathParam1/{id}")
public String pathParam1(@PathVariable Integer id) {
return id.toString();
}
//路径参数
@RequestMapping("/pathParam2/{id}/{name}")
public String pathParam2(@PathVariable Integer id,@PathVariable String name) {
return id.toString()+":"+name;
}
}



@ResponseBody&统一响应结果

响应实现:
java
package com.jianglin.controller;
import com.jianglin.pojo.Address;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
@RestController
public class responseController {
@RequestMapping("/hello")
public String hello() {
System.out.println("hello");
return "hello";
}
@RequestMapping("/getAddress")
public Address getAddress() {
Address address = new Address();
address.setProvince("河南");
address.setCity("濮阳");
return address;
}
@RequestMapping("/listAddress")
public List<Address> listAddress() {
List<Address> addressList = new ArrayList<Address>();
Address address = new Address();
address.setProvince("河南");
address.setCity("濮阳");
addressList.add(address);
return addressList;
}
}





统一响应格式,便于管理维护:
java
package com.jianglin.controller;
import com.jianglin.pojo.Address;
import com.jianglin.pojo.Result;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
@RestController
public class responseController {
@RequestMapping("/hello")
public Result hello() {
System.out.println("hello");
// return new Result(1,"success","hello");
return Result.success("hello");
}
@RequestMapping("/getAddress")
public Result getAddress() {
Address address = new Address();
address.setProvince("河南");
address.setCity("濮阳");
return Result.success(address);
}
@RequestMapping("/listAddress")
public Result listAddress() {
List<Address> addressList = new ArrayList<Address>();
Address address = new Address();
address.setProvince("河南");
address.setCity("濮阳");
addressList.add(address);
return Result.success(addressList);
}
// @RequestMapping("/hello")
// public String hello() {
// System.out.println("hello");
// return "hello";
// }
//
// @RequestMapping("/getAddress")
// public Address getAddress() {
// Address address = new Address();
// address.setProvince("河南");
// address.setCity("濮阳");
// return address;
// }
//
// @RequestMapping("/listAddress")
// public List<Address> listAddress() {
// List<Address> addressList = new ArrayList<Address>();
// Address address = new Address();
// address.setProvince("河南");
// address.setCity("濮阳");
// addressList.add(address);
// return addressList;
// }
}




响应案例




案例代码实现:
java
//pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.0</version>
<relativePath/>
</parent>
<groupId>com.itheima</groupId>
<artifactId>springboot-emp-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-emp-demo</name>
<dependencies>
<!-- SpringBoot Web依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- dom4j依赖(解析XML) -->
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.3</version>
</dependency>
</dependencies>
</project>
//Emp.java
package com.jianglin.pojo;
public class Emp {
private String name; // 姓名
private Integer age; // 年龄
private String image; // 头像URL
private Integer gender; // 性别(1-男,2-女)
private Integer job; // 职位(1-讲师,2-班主任,3-就业指导)
// getter和setter
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public Integer getAge() { return age; }
public void setAge(Integer age) { this.age = age; }
public String getImage() { return image; }
public void setImage(String image) { this.image = image; }
public Integer getGender() { return gender; }
public void setGender(Integer gender) { this.gender = gender; }
public Integer getJob() { return job; }
public void setJob(Integer job) { this.job = job; }
}
//XmlParserUtils.java 解析xml文件
package com.jianglin.utils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class XmlParserUtils {
/**
* 解析XML文件为指定类型的集合
*/
public static <T> List<T> parse(String filePath, Class<T> clazz) {
List<T> list = new ArrayList<>();
try {
// 1. 创建SAXReader对象
SAXReader reader = new SAXReader();
// 2. 读取XML文件
Document document = reader.read(new File(filePath));
// 3. 获取根元素
Element rootElement = document.getRootElement();
// 4. 获取所有emp子元素
List<Element> empElements = rootElement.elements("emp");
// 5. 遍历emp元素,封装为Emp对象
for (Element empElement : empElements) {
T obj = clazz.newInstance();
// 设置属性
setFieldValue(obj, "name", empElement.elementText("name"));
setFieldValue(obj, "age", Integer.parseInt(empElement.elementText("age")));
setFieldValue(obj, "image", empElement.elementText("image"));
setFieldValue(obj, "gender", Integer.parseInt(empElement.elementText("gender")));
setFieldValue(obj, "job", Integer.parseInt(empElement.elementText("job")));
list.add(obj);
}
} catch (DocumentException | InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
return list;
}
// 反射设置属性值
private static <T> void setFieldValue(T obj, String fieldName, Object value) {
try {
var field = obj.getClass().getDeclaredField(fieldName);
field.setAccessible(true);
field.set(obj, value);
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
}
}
//EmpController.java
package com.jianglin.controller;
import com.jianglin.pojo.Emp;
import com.jianglin.pojo.Result;
import com.jianglin.utils.XmlParserUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
@RestController
public class EmpController {
@RequestMapping("/listEmp")
public Result list(){
//1.加载并解析emp.xml
String file = this.getClass().getClassLoader().getResource("emp.xml").getFile();
System.out.println(file);
List<Emp> empList = XmlParserUtils.parse(file,Emp.class);
//2.对数据进行转换处理
empList.forEach(emp->{
//对性别进行处理
String gender = emp.getGender();
if ("1".equals(gender)) {
emp.setGender("男");
}else if ("2".equals(gender)) {
emp.setGender("女");
}
//对工作类型进行判断
String job = emp.getJob();
if("1".equals(job)){
emp.setJob("讲师");
}else if ("2".equals(job)){
emp.setJob("班主任");
}else if ("3".equals(job)){
emp.setJob("就业指导");
}
});
//3.响应数据
return Result.success(empList);
}
}
//emp.xml
<?xml version="1.0" encoding="UTF-8"?>
<emps>
<emp>
<name>金毛狮王</name>
<age>55</age>
<image>https://web-framework.oss-cn-hangzhou.aliyuncs.com/web/1.jpg</image>
<!-- 1:男,2:女 -->
<gender>1</gender>
<!-- 1:讲师,2:班主任,3:就业指导 -->
<job>1</job>
</emp>
<emp>
<name>白眉鹰王</name>
<age>65</age>
<image>https://web-framework.oss-cn-hangzhou.aliyuncs.com/web/2.jpg</image>
<gender>1</gender>
<job>1</job>
</emp>
<emp>
<name>青翼蝠王</name>
<age>45</age>
<image>https://web-framework.oss-cn-hangzhou.aliyuncs.com/web/3.jpg</image>
<gender>1</gender>
<job>2</job>
</emp>
<emp>
<name>紫衫龙王</name>
<age>38</age>
<image>https://web-framework.oss-cn-hangzhou.aliyuncs.com/web/4.jpg</image>
<gender>2</gender>
<job>3</job>
</emp>
</emps>
//emp.html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>员工信息列表</title>
<style>
table { width: 800px; margin: 20px auto; border-collapse: collapse; }
th, td { border: 1px solid #ccc; padding: 10px; text-align: center; }
th { background-color: #f0f0f0; }
img { width: 60px; height: 60px; border-radius: 50%; }
</style>
</head>
<body>
<h1 style="text-align: center;">员工信息列表展示</h1>
<table>
<tr>
<th>姓名</th>
<th>年龄</th>
<th>图像</th>
<th>性别</th>
<th>职位</th>
</tr>
<tbody id="empTableBody">
<!-- 数据将通过JS动态渲染 -->
</tbody>
</table>
<script>
// 发送请求获取员工数据
fetch('/emps')
.then(response => response.json())
.then(result => {
if (result.code === 1) {
const emps = result.data;
const tableBody = document.getElementById('empTableBody');
// 遍历数据生成表格行
emps.forEach(emp => {
const row = document.createElement('tr');
row.innerHTML = `
<td>${emp.name}</td>
<td>${emp.age}</td>
<td><img src="${emp.image}" alt="头像"></td>
<td>${emp.gender}</td>
<td>${emp.job}</td>
`;
tableBody.appendChild(row);
});
} else {
alert('获取数据失败:' + result.msg);
}
});
</script>
</body>
</html>
分层解耦
三层架构



实现三层架构:
java
//dao层
//EmpDao.java
package com.jianglin.dao;
import com.jianglin.pojo.Emp;
import java.util.List;
public interface EmpDao {
//获取员工列表信息
public List<Emp> listEmp();
}
//empDaoImpl.java
package com.jianglin.dao.impl;
import com.jianglin.dao.EmpDao;
import com.jianglin.pojo.Emp;
import com.jianglin.utils.XmlParserUtils;
import java.util.List;
public class empDaoImpl implements EmpDao {
@Override
public List<Emp> listEmp() {
//获取数据
//加载并解析emp.xml
String file = this.getClass().getClassLoader().getResource("emp.xml").getFile();
System.out.println(file);
List<Emp> empList = XmlParserUtils.parse(file,Emp.class);
return empList;
}
}
//service.java
//EmpService.java
package com.jianglin.service;
import com.jianglin.pojo.Emp;
import java.util.List;
public interface EmpService {
//获取员工列表
public List<Emp> listEmp();
}
//EmpServiceImpl.java
package com.jianglin.service.impl;
import com.jianglin.dao.EmpDao;
import com.jianglin.dao.impl.empDaoImpl;
import com.jianglin.pojo.Emp;
import com.jianglin.service.EmpService;
import java.util.Collections;
import java.util.List;
public class EmpServiceImpl implements EmpService {
private EmpDao empDao = new empDaoImpl();
@Override
public List<Emp> listEmp() {
//获取数据信息
List<Emp> empList = empDao.listEmp();
//对数据进行转换处理
empList.forEach(emp->{
//对性别进行处理
String gender = emp.getGender();
if ("1".equals(gender)) {
emp.setGender("男");
}else if ("2".equals(gender)) {
emp.setGender("女");
}
//对工作类型进行判断
String job = emp.getJob();
if("1".equals(job)){
emp.setJob("讲师");
}else if ("2".equals(job)){
emp.setJob("班主任");
}else if ("3".equals(job)){
emp.setJob("就业指导");
}
});
return empList;
}
}
//EmpController.java
package com.jianglin.controller;
import com.jianglin.pojo.Emp;
import com.jianglin.pojo.Result;
import com.jianglin.service.EmpService;
import com.jianglin.service.impl.EmpServiceImpl;
import com.jianglin.utils.XmlParserUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
@RestController
public class EmpController {
private EmpService empService = new EmpServiceImpl();
@RequestMapping("/listEmp")
public Result list(){
List<Emp> listEmp = empService.listEmp();
//响应数据
return Result.success(listEmp);
}
}
IOC-DI引入




IOC&DI入门







实现容器管理:
java
//EmpController.java
package com.jianglin.controller;
import com.jianglin.pojo.Emp;
import com.jianglin.pojo.Result;
import com.jianglin.service.EmpService;
import com.jianglin.service.impl.EmpServiceImpl;
import com.jianglin.utils.XmlParserUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
@RestController
public class EmpController {
@Autowired //运行时IOC容器会提供该类型的bean对象,并赋值给该对象,又称依赖注入
private EmpService empService;
@RequestMapping("/listEmp")
public Result list(){
List<Emp> listEmp = empService.listEmp();
//响应数据
return Result.success(listEmp);
}
}
//empDaoImpl.java
package com.jianglin.dao.impl;
import com.jianglin.dao.EmpDao;
import com.jianglin.pojo.Emp;
import com.jianglin.utils.XmlParserUtils;
import org.springframework.stereotype.Component;
import java.util.List;
@Component//将当前类交给容器管理,成为IOC的bean
public class empDaoImpl implements EmpDao {
@Override
public List<Emp> listEmp() {
//获取数据
//加载并解析emp.xml
String file = this.getClass().getClassLoader().getResource("emp.xml").getFile();
System.out.println(file);
List<Emp> empList = XmlParserUtils.parse(file,Emp.class);
return empList;
}
}
//EmpServiceImpl.java
package com.jianglin.service.impl;
import com.jianglin.dao.EmpDao;
import com.jianglin.dao.impl.empDaoImpl;
import com.jianglin.pojo.Emp;
import com.jianglin.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Collections;
import java.util.List;
@Component//将当前类交给容器管理,成为IOC的bean
public class EmpServiceImpl implements EmpService {
@Autowired //运行时IOC容器会提供该类型的bean对象,并赋值给该对象,又称依赖注入
private EmpDao empDao;
@Override
public List<Emp> listEmp() {
//获取数据信息
List<Emp> empList = empDao.listEmp();
//对数据进行转换处理
empList.forEach(emp->{
//对性别进行处理
String gender = emp.getGender();
if ("1".equals(gender)) {
emp.setGender("男");
}else if ("2".equals(gender)) {
emp.setGender("女");
}
//对工作类型进行判断
String job = emp.getJob();
if("1".equals(job)){
emp.setJob("讲师");
}else if ("2".equals(job)){
emp.setJob("班主任");
}else if ("3".equals(job)){
emp.setJob("就业指导");
}
});
return empList;
}
}
如果我们想要实现service层中的EmpServiceImplB的方法,则只需将该类添加@Component注解即可,并将EmpServiceImpl的注解给去掉,这样我们不用去修改其它层(eg,EmpController)的代码,因为容器会自动扫描注解,创建类,从而达到解耦的目的。


IOC详解


@Service、@Repository、@Controller称为@Component的衍生注解
可指定bean的名字,当未设置时,默认是该类的第一个字母小写的类名



bean名一般情况下我们是不用修改的。


DI详解


第一种解决方案:
在想要生效的Service类上面添加一个@Primary注解

方案二:
指定是要用哪个bean

方案三:
resource注解来指定我要注入的是哪个beab,指定bean的名字,那Autowired的这个注解呢,默认是按照类型进行注入的,而resource这个注解是按照名称进行注入的


先按照类型,有多个再按照名称
这篇文章就先更到这里,接下来的内容可查看我的下一篇博客,感谢观看,希望对你有帮助。