一、分层解耦-三层架构




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

小结




















