当前位置: 首页 > news >正文

初学Spring之 IOC 控制反转

Spring 是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架

导入 jar 包:spring-webmvc、spring-jdbc

    <dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.0.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.2.0.RELEASE</version></dependency>

SpringBoot:(构建)

1.一个快速开发的脚手架

2.基于 SpringBoot 可以快速开发单个微服务

3.约定大于配置

SpringCloud:(协调)

SpringCloud 是基于 SpringBoot 实现的

dao 层即 Data Access Object

service 层即业务层,在业务层调用 dao 层

使用 set 注入后,程序不再具有主动性,而是变成了被动的接收对象

写个测试类调用 set 方法

用户实际调用的是业务层,dao 层用户不需要接触(程序在 dao 层修改)

即不通过直接访问 dao 层,通过 service 层作为桥梁来调用

UserServiceImpl 类代码:

package com.demo.service;
import com.demo.dao.UserDao;public class UserServiceImpl implements UserService{private UserDao userDao;//利用set进行动态实现值的注入public void setUserDao(UserDao userDao) {this.userDao = userDao;}@Overridepublic void getUser() {userDao.getUser(); //业务层调dao层}
}

MyTest 类代码:

import com.demo.dao.UserDaoMysqlImpl;
import com.demo.service.UserService;
import com.demo.service.UserServiceImpl;public class MyTest {public static void main(String[] args) {/*用户实际调用的是业务层,dao层不需要接触即不通过直接访问dao层,通过service作为桥梁来调用*/UserService userService = new UserServiceImpl();((UserServiceImpl)userService).setUserDao(new UserDaoMysqlImpl());userService.getUser();}
}

IOC 控制反转(Inversion of Control),获得依赖对象的方式反转,即把选择权交给用户,其实现方式是依赖注入(Dependency Injection,DI)

(如果不是这种设计思想,主动权在业务层,

private UserDao userDao = new UserDaoImpl(); 每次都要 new 新的 dao 层类,不适用)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Git使用[推送大于100M的文件后解救办法]
  • k8s 答疑
  • vector模拟实现【C++】
  • 【Git】GitIgnore不生效
  • 【OpenSSH】紧急警报!新发现的OpenSSH漏洞,安全界面临严峻考验
  • .NET之C#编程:懒汉模式的终结,单例模式的正确打开方式
  • AI为小微企业赋能:解锁数字化转型的金钥匙
  • PHP护照识别API、护照识别设备
  • 在低版本Excel中创建次级下拉列表
  • 1、音视频解封装流程---解复用
  • 软件测试基础知识总结
  • 如何使用PHP Curl类库编写高效的爬虫程序?
  • VUE自定义新增、复制、删除dom元素
  • LLM应用:传统NLP任务
  • H5项目使用vant组件的手机号校验
  • 0基础学习移动端适配
  • Android优雅地处理按钮重复点击
  • Git初体验
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • Js基础——数据类型之Null和Undefined
  • Laravel 实践之路: 数据库迁移与数据填充
  • node 版本过低
  • rabbitmq延迟消息示例
  • SpringCloud集成分布式事务LCN (一)
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 安装python包到指定虚拟环境
  • 安卓应用性能调试和优化经验分享
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 深入浅出webpack学习(1)--核心概念
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 手写双向链表LinkedList的几个常用功能
  • 怎样选择前端框架
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • 如何用纯 CSS 创作一个货车 loader
  • ​数据链路层——流量控制可靠传输机制 ​
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • (1)(1.9) MSP (version 4.2)
  • (1)Nginx简介和安装教程
  • (1)svelte 教程:hello world
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (论文阅读11/100)Fast R-CNN
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (十六)、把镜像推送到私有化 Docker 仓库
  • (十六)视图变换 正交投影 透视投影
  • (学习日记)2024.01.09
  • (最新)华为 2024 届秋招-硬件技术工程师-单板硬件开发—机试题—(共12套)(每套四十题)
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET 5种线程安全集合
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET Framework与.NET Framework SDK有什么不同?
  • .net 简单实现MD5
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .NET/C# 获取一个正在运行的进程的命令行参数