javaWeb开发~分层解耦

avatar
作者
猴君
阅读量:2

介绍

        新手程序员一枚,渴望成为大神,来点关注来点赞,给我介绍几个大神也行,球球了。


        主要记录自己的学习过程,将之前的笔记进行整理并分享一下,有错误请指出,谢谢各位大佬爷们的观看。

        下面开始分享我的笔记


三层架构

  • 流程

    • controller层接收到请求去调用service层

    • service层去调用dao层

    • dao层获取数据,交给servicec层

    • service层对数据进行逻辑处理,并返回给controller层

    • controller层获取到数据响应给浏览器

  • 修改上文(请求与响应~响应)中的程序

    • service层

      • 接口

      • package com.testpeople.service;  import com.testpeople.pojo.Emp;  import java.util.List;  public interface EmpService {      //获取员工列表数据     public List<Emp> listEmp();   }
      • 实现

      • package com.testpeople.service.impl;  import com.testpeople.dao.EmpDao; import com.testpeople.dao.impl.EmpDaoA; import com.testpeople.pojo.Emp; import com.testpeople.service.EmpService;  import java.util.List;  public class EmpServiceA implements EmpService { //    service层获取数据来自dao层 故需要dao层对象     private EmpDao empDao = new EmpDaoA();      @Override     public List<Emp> listEmp() {          //调用Dao层获取数据         List<Emp> empList = empDao.listEmp();          //对数据进行处理         empList.stream().forEach(emp ->{             //处理gender~男:1  女:2             String gender = emp.getGender();             if ("1".equals(gender)){                 emp.setGender("男");             } else if ("2".equals(gender)) {                 emp.setGender("女");             }              //处理job~讲师:1    班主任:2   就业指导:3             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;     } }
      • dao层

        • 接口

        • package com.testpeople.dao;  import com.testpeople.pojo.Emp;  import java.util.List;  public interface EmpDao {      //获取员工数据集合     public List<Emp> listEmp();     }
        • 实现

        • package com.testpeople.dao.impl;  import com.testpeople.dao.EmpDao; import com.testpeople.pojo.Emp; import com.testpeople.utils.XmlParserUtils;  import java.util.List;  public class EmpDaoA implements EmpDao {     @Override     public List<Emp> listEmp() {          //加载并解析XML文件         String filePath = this.getClass().getClassLoader().getResource("emp.xml").getFile();         System.out.println(filePath);         List<Emp> empList = XmlParserUtils.parse(filePath, Emp.class);          return empList;     } }
      • contraller层

      • package com.testpeople.controller;  import com.testpeople.pojo.Emp; import com.testpeople.pojo.Result; import com.testpeople.service.EmpService; import com.testpeople.service.impl.EmpServiceA; import com.testpeople.utils.XmlParserUtils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;  import java.util.List;  @RestController public class EmpController {      private EmpService empService = new EmpServiceA();      @RequestMapping("/listEmp")     public Result list(){          //获取数据         List<Emp> empList = empService.listEmp();          //响应数据         return Result.success(empList);      }   }
      • 效果见 (请求与响应~响应

分层解耦

  • 内聚~软件中各个功能模块内部的联系

  • 解耦~衡量软件中各个模块/层中间的依赖关系,关联程度。

  • 设计原则~高内聚低耦合

  • 解耦合~(利用容器)

    • 控制反转~IOC

      • 对象的创建控制权限由程序自身控制转移到外部(容器),此种思想叫控制反转(其中容器叫spring容器/IOC容器)。

    • 依赖注入~DI

      • 容器为程序提供运行时,所以依赖的资源,称为依赖注入。

    • Bean对象

      • IOC容器中创建、管理的对象,称为bean

IOC&DI

入门程序

步骤
  1. Service层及Dao层的实现类,交给IOC容器管理

    1. 删除实现类中new的对象。

  2. 为Controller及Service注入运行时,依赖的对象。

    1. 为类添加@Component注解。(添加到容器中)

    2. 为对象添加@Autowired注解。(实现依赖注入)

  • 注意不要添加错误。

  • 若有两个相同的实现类,使用那个变将那个实现类添加@Component.

  1. 运行测试

  2. 效果

IOC详解

Bean声明
  • 将某个对象交给IOC容器管理,需要在类上添加以下注解。

  • 可以通过idea工具查看bean对象

  • 注意

    • 添加注解是可在注解后添加名字(value字段)一般不用。

    • @Service(value = "EmpA")
    • 使用上述注解都可声明bean,但是在springboot集成web开发中,声明控制器bean只能使用@Controller.

  Bean的组件扫描
  • 声明的注解,想要生效,需要被组件扫描注解@ComponentScan扫描到。

  • 默认在启动类中添加了此注解,扫描范围启动类所在的包以及子包。

  • 可以通过自定义扫描范围,不建议。

DI详解

  Bean注入
  • @Autowired:默认按照类型自动装配。

  • 存在多个bean时解决。

    • @Primary ~那个需要添加到那个。

    • @Autowired + @Qualifler("bean名称")

    • @Resource("bean名称")

  @Autowired和@Resource区别
  • @Autowired是spring框架提供的,而@Resource是JDK提供的注解

  • @Autowired默认按照类型注入,而@Resource默认按照名称注入。


以上是学习的第九弹笔记,也是后端开始的第五弹笔记,感兴趣的关注一手,后面会慢慢更新笔记。

项目位置!!!!!

https://gitee.com/zsjnew/admin_web_project.git


公司组织培训了,更新应该会更加快,记得关注哦,感谢各位老爷们!!!

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!