P75分层解耦-IOC&DI详解

一、分层解耦-三层架构

P75分层解耦-IOC&DI详解_第1张图片

P75分层解耦-IOC&DI详解_第2张图片

P75分层解耦-IOC&DI详解_第3张图片

P75分层解耦-IOC&DI详解_第4张图片

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 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("就业指导");
         }
      });*/

}

二、分层解耦

在这里插入图片描述

P75分层解耦-IOC&DI详解_第5张图片

P75分层解耦-IOC&DI详解_第6张图片

三、IOC & DI入门

P75分层解耦-IOC&DI详解_第7张图片

P75分层解耦-IOC&DI详解_第8张图片

P75分层解耦-IOC&DI详解_第9张图片

P75分层解耦-IOC&DI详解_第10张图片

P75分层解耦-IOC&DI详解_第11张图片

P75分层解耦-IOC&DI详解_第12张图片

将service的实现类A的注解@Component注释掉

P75分层解耦-IOC&DI详解_第13张图片

新建一个实现类B,添加注解@Compentent

这样就切换为实现类B了

P75分层解耦-IOC&DI详解_第14张图片

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mfuPr7l4-1682001792346)(…/…/…/AppData/Roaming/Typora/typora-user-images/image-20230420211746353.png)]

四、IOC详解

P75分层解耦-IOC&DI详解_第15张图片

P75分层解耦-IOC&DI详解_第16张图片

P75分层解耦-IOC&DI详解_第17张图片

P75分层解耦-IOC&DI详解_第18张图片

P75分层解耦-IOC&DI详解_第19张图片

P75分层解耦-IOC&DI详解_第20张图片

小结

P75分层解耦-IOC&DI详解_第21张图片

五、DI详解

P75分层解耦-IOC&DI详解_第22张图片

@Autowired默认是按照类型进行自动装配的,如果存在多个相同类型的bean,就会出错,我们需要调整bean的优先级

P75分层解耦-IOC&DI详解_第23张图片

P75分层解耦-IOC&DI详解_第24张图片

P75分层解耦-IOC&DI详解_第25张图片

在EmpServiceB.java添加了注解@Primary,在Controller中注入的就是EmpServiceB

P75分层解耦-IOC&DI详解_第26张图片

在EmpController中添加了注解@Qualifier

P75分层解耦-IOC&DI详解_第27张图片

P75分层解耦-IOC&DI详解_第28张图片

在EmpController中添加了注解@Resource

P75分层解耦-IOC&DI详解_第29张图片

小结

P75分层解耦-IOC&DI详解_第30张图片

注意bean的名称是类名,第一个字母小写

@Resource和@AutoWired的区别(面试题)

你可能感兴趣的:(2023javaweb,java,servlet,spring)