一、分层解耦-三层架构
Dao层:数据访问
1、接口
package com.itheima.service;
import com.itheima.pojo.Emp;
import java.util.List;
/**
* Description:
* date: 2023/4/19 21:47
*
* @since JDK 11
*/
public interface EmpService {
// 获取员工列表数据
public List<Emp> listEmp();
}
2、实现类
package com.itheima.service.impl;
import com.itheima.dao.EmpDao;
import com.itheima.dao.impl.EmpDaoA;
import com.itheima.pojo.Emp;
import com.itheima.service.EmpService;
import java.util.List;
/**
* Description:
* date: 2023/4/19 21:49
*
* @since JDK 11
*/
public class EmpServiceA implements EmpService {
// 创建一个Dao对象,面向接口。
private EmpDao empDao = new EmpDaoA();
public List<Emp> listEmp(){
// 1、调用Dao获取数据
List<Emp> empList = empDao.listEmp();
// 2、对数据进行转换处理
empList.stream().forEach(emp ->{
// 处理gender 1代表男性、2代表女性
String gender = emp.getGender();
if(gender.equals("1")){
emp.setGender("男");
}else {
emp.setGender("女");
}
// 处理job 1代表讲师、2代表班主任、3代表就业指导
String job = emp.getJob();
if(job.equals("1")){
emp.setJob("讲师");
}
if(job.equals("2")){
emp.setJob("班主任");
}
if(job.equals("3")){
emp.setJob("就业指导");
}
});
return empList;
}
}
Service层:逻辑处理
1、接口
package com.itheima.service;
import com.itheima.pojo.Emp;
import java.util.List;
/**
* Description:
* date: 2023/4/19 21:47
*
* @since JDK 11
*/
public interface EmpService {
// 获取员工列表数据
public List<Emp> listEmp();
}
2、实现类
package com.itheima.service.impl;
import com.itheima.dao.EmpDao;
import com.itheima.dao.impl.EmpDaoA;
import com.itheima.pojo.Emp;
import com.itheima.service.EmpService;
import java.util.List;
/**
* Description:
* date: 2023/4/19 21:49
*
* @since JDK 11
*/
public class EmpServiceA implements EmpService {
// 创建一个Dao对象,面向接口。
private EmpDao empDao = new EmpDaoA();
public List<Emp> listEmp(){
// 1、调用Dao获取数据
List<Emp> empList = empDao.listEmp();
// 2、对数据进行转换处理
empList.stream().forEach(emp ->{
// 处理gender 1代表男性、2代表女性
String gender = emp.getGender();
if(gender.equals("1")){
emp.setGender("男");
}else {
emp.setGender("女");
}
// 处理job 1代表讲师、2代表班主任、3代表就业指导
String job = emp.getJob();
if(job.equals("1")){
emp.setJob("讲师");
}
if(job.equals("2")){
emp.setJob("班主任");
}
if(job.equals("3")){
emp.setJob("就业指导");
}
});
return empList;
}
}
controller层:接收请求,响应数据
1、代码
package com.itheima.controller;
import com.itheima.pojo.Emp;
import com.itheima.pojo.Result;
import com.itheima.service.EmpService;
import com.itheima.service.impl.EmpServiceA;
import com.itheima.utils.XmlParserUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* Description:
* date: 2023/4/19 20:03
*
* @since JDK 11
*/
@RestController
public class EmpController {
// 定义面向接口的对象
private EmpService empService = new EmpServiceA();
@RequestMapping("/listEmp")
public Result listEmp() {
// 1、调用service,获取数据
List<Emp> empList = empService.listEmp();
// 2、响应数据
return Result.success(empList);
}
/*// 1、加载并解析emp.xml
// 动态加载文件路径。切记不能模块路径不能带空格!!!不能有中文
String file = this.getClass().getClassLoader().getResource("emp.xml").getFile();
// String file = "D:/intellij java/itheima_web_project/springboot-web-req-resp/src/main/resources/emp.xml";
List<Emp> empList = XmlParserUtils.parse(file,Emp.class);
// 2、对数据进行转换处理
empList.stream().forEach(emp ->{
// 处理gender 1代表男性、2代表女性
String gender = emp.getGender();
if(gender.equals("1")){
emp.setGender("男");
}else {
emp.setGender("女");
}
// 处理job 1代表讲师、2代表班主任、3代表就业指导
String job = emp.getJob();
if(job.equals("1")){
emp.setJob("讲师");
}
if(job.equals("2")){
emp.setJob("班主任");
}
if(job.equals("3")){
emp.setJob("就业指导");
}
});*/
}
二、分层解耦
三、IOC & DI入门
将service的实现类A的注解@Component注释掉
新建一个实现类B,添加注解@Compentent
这样就切换为实现类B了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mfuPr7l4-1682001792346)(…/…/…/AppData/Roaming/Typora/typora-user-images/image-20230420211746353.png)]
四、IOC详解
小结
五、DI详解
@Autowired默认是按照类型进行自动装配的,如果存在多个相同类型的bean,就会出错,我们需要调整bean的优先级
在EmpServiceB.java添加了注解@Primary,在Controller中注入的就是EmpServiceB
在EmpController中添加了注解@Qualifier
在EmpController中添加了注解@Resource