Cynicism Cynicism
首页
  • 前端学习笔记

    • 《Vue》笔记
    • 《TypeScript 从零实现 axios》
    • TypeScript
    • JS设计模式总结
    • 小程序笔记
  • 后端学习笔记

    • 《JavaWeb》
    • 《SSM》
    • 《瑞吉外卖》
    • 《Git》
    • 《SpringCloud》
    • 《黑马点评》
    • 《Spring原理》
    • 《JVM》
    • 《Java并发编程》
    • 《学成在线》
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 面试
  • 常见问题
  • 实用技巧
  • 友情链接
实习
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Cynicism

Java后端学习中的IKUN
首页
  • 前端学习笔记

    • 《Vue》笔记
    • 《TypeScript 从零实现 axios》
    • TypeScript
    • JS设计模式总结
    • 小程序笔记
  • 后端学习笔记

    • 《JavaWeb》
    • 《SSM》
    • 《瑞吉外卖》
    • 《Git》
    • 《SpringCloud》
    • 《黑马点评》
    • 《Spring原理》
    • 《JVM》
    • 《Java并发编程》
    • 《学成在线》
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 面试
  • 常见问题
  • 实用技巧
  • 友情链接
实习
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • JS对象基础知识
  • Ajax与Maven
  • 请求响应
  • 分层解耦
    • 1. 三层架构
    • 2. 分层解耦
    • 3. IOC & DI
      • 3.1 解耦概述
      • 3.2 IOC详解
      • 3.3 DI详解
  • MySql基础
  • MySql进阶
  • Mybatis入门
  • Mybatis进阶
  • Springboot项目
  • 登录校验
  • AOP
  • Springboot原理
  • 私服配置说明
  • 《JavaWeb》笔记
cynicism
2023-4-4
目录

分层解耦

# 1. 三层架构

① Controller:控制层,接收前端发送的请求,对请求进行处理,并响应数据

② Service:业务逻辑层,处理具体的业务逻辑

③ Dao:数据访问层,负责数据访问操作(增删改查)

按照三层架构的思想,对业务逻辑(Service层)进行变更,不会影响到Controller层和Dao层

# 2. 分层解耦

软件设计原则:高内聚低耦合

高内聚指的是:一个模块中各个元素之间的联系的紧密程度,如果各个元素(语句、程序段)之间的联系程度越高,则内聚性越高,即 "高内聚"。
低耦合指的是:软件中各个层、模块之间的依赖关联程序越低越好。
💡为了实现分层解耦,需要借助控制反转和依赖注入

  • 控制反转: Inversion Of Control,简称IOC。
    对象的创建控制权由程序自身转移到外部(容器),这种思想称为控制反转。

    对象的创建权由程序员主动创建转移到容器(由容器创建、管理对象)。这个容器称为:IOC容器或Spring容器

  • 依赖注入: Dependency Injection,简称DI。
    容器为应用程序提供运行时,所依赖的资源,称之为依赖注入。

    程序运行时需要某个资源,此时容器就为其提供这个资源。

    例:EmpController程序运行时需要EmpService对象,Spring容器就为其提供并注入EmpService对象

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

# 3. IOC & DI

# 3.1 解耦概述

通过下方两个注解实现解耦过程

  • @Component : 将当前对象交给IOC容器管理,成为IOC容器的bean
  • @Autowired : 运行时,从IOC容器中获取该类型对象,赋值给该变量

# 3.2 IOC详解

💡Spring框架为了更好的标识web应用程序开发当中,bean对象到底归属哪一层,提供了@Component的衍生注解:
💡注解中可以指定value属性指定生成bean对象的名字,默认为类名首字母小写

提示

  • 使用四大注解声明的bean,要想生效,还需要被组件扫描注解@ComponentScan扫描
  • @ComponentScan注解虽然没有显式配置,但是实际上已经包含在了引导类声明注解 @SpringBootApplication 中,默认扫描的范围是SpringBoot启动类所在包及其子包。

# 3.3 DI详解

@Autowired注解,默认是按照类型进行自动装配的(去IOC容器中找某个类型的对象,然后完成注入操作),当出现多个相同类型则会报错

解决方案:
① 使用@Primary注解:当存在多个相同类型的Bean注入时,在定义类前加上@Primary注解,来确定默认的实现;
② 使用@Qualifier注解:在声明对象时使用,在value属性中,指定注入的bean的名称;必须要与@Autowired一起使用
③ 使用@Resource注解:在声明对象时使用,通过name属性指定要注入的bean的名称,可以单独使用

面试题 : @Autowird 与 @Resource的区别

  • @Autowired 是spring框架提供的注解,而@Resource是JDK提供的注解
  • @Autowired 默认是按照类型注入,而@Resource是按照名称注入
编辑 (opens new window)
#后端
上次更新: 2025/05/12, 04:51:03
请求响应
MySql基础

← 请求响应 MySql基础→

最近更新
01
JVM调优
06-03
02
Linux篇
03-30
03
Kafka篇
03-30
更多文章>
Theme by Vdoing | Copyright © 2023-2025 Cynicism | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式