IOC 容器

news2024/11/20 1:38:45

 IOC 概念和原理

1. 什么是 IOC?

        控制饭庄( Inversion of Control ,缩写为 IOC),是面向对象编程中的一种设计原则,可以用来降低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入( Dependency Injection ,简称 DI ),还有一种方式叫“依赖查找”( Dependency Lookup )。通过控制反转,对象在被创建的时候,有一个调控系统内所有对象的外接实体将其所依赖的对象的引用传递给它。也可以说,以来被注入到对象中。

  • 控制反转,把对象的创建和对象之间的调用过程,交给 Spring 进行管理
  • 使用 IOC 的目的:为了耦合度降低
  • 做入门的案例就是 IOC实现

2. IOC 的底层原理

  •  xml 解析、工厂模式、反射

3. 画图讲解 IOC 的底层原理

原始方式

class UserService {
    execute () {
        UserDao dao = new UserDao ();
        dao.add();
    }
}
class UserDao () {
    add () {
        ...
    }
}

这样子的话耦合度太高了

工厂模式

class UserService () {
    execute () {
        UserDao = UserFactory.getDao();
        dao.add();    
    }
}
class UserDao () {
    add () {
        ...
    }
}
class UserFactory {
    public ststic UserDao getDao () {
        return new UserDao();
    }
}

 IOC 过程

  • 第一步 xml配置文件,配置创建的对象
<bean id = "user" class = "com.fairykunkun.User"></bean>
  • 第二步 有 service 类和 dao 类,创建工厂类
class UserFactory {
    public ststic UserDao getDao () {
        String classValue = class 属性值; // xml 解析
        Class clazz = Class.forName(classValue);// 通过反射创建对象
        return (UserDao)clazz.newInstance ();
    }
}

这样子就把我们的耦合度做了进一步的降低

 IOC 接口

1. IOC 思想基于 IOC 容器完成, IOC 容器底层就是对象工厂

2. Spring 提供了 IOC 容器实现的两种方式:(两个重要的接口)

(1) BeanFactory : IOC 容器基本实现,是 Spring 内部的使用接口,不提供开发人员进行使用

注意: BeanFactory 在加载配置文件的时候不会创建对象,在使用对象或者获取对象的时候才会去创建对象

(2) ApplicationContext: BeanFactory 接口的子接口,提供更多强大的功能,一般是由开发人员进行使用的

注意: ApplicationContext 在加载配置文件的时候就已经创建好对象了

  •  一般来讲,耗时耗资源的操作在项目启动的时候处理好是最合适的,所以我们一般会选择 ApplicationContext 来进行操作

 ApplicationContext 接口有实现类

 我这个目前用的是最新版的 Spring ,所以就长这样

  • 这个文件我们用的时候,要写上我们的配置文件的名称

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/72076.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SSM的网红书购物商城(源码+论文+开题报告+答辩PPT)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

java实现简单窗口小游戏“扫雷”

前言 忘记是从何处看到过关于扫雷小程序的文章&#xff0c;所以这次也就跟着做一下。其实很简单的&#xff0c;如果有java入门的同学也可以尝试一下自己做这种java小程序。几行代码做几遍基本上能摸清楚这些基础了&#xff0c;对于编程能力也能提高一些。&#xff08;虽然小编…

appium笔记——01环境搭建

0、关系图 1.appium客户端&#xff1a; python程序&#xff0c;链接appium服务器&#xff0c;并发送请求 2.appium服务端(模拟器客户端)&#xff1a; appium程序&#xff0c;需要提前启动&#xff0c;不仅充当appium服务端&#xff0c;还充当模拟器客户端&#xff08;接收h…

基于Apriori算法的购物网站商品推荐系统

基于Apriori算法的购物网站商品推荐系统 目 录 一、 算法内容 3 Step 1 收集用户偏好 3 Step 2 对数据进行预处理 3 Step 3 计算相似度 4 Step 4 找邻居 5 Step 5 计算推荐 6 二、 预期结果 6 三、 对比和讨论 7 Step 5 计算推荐 Section A 基于用户的协同过滤(User CF) 通过前…

Python中12个常用模块的使用教程

1. time模块 import time *一*#时间戳--》结构化时间--》格式化的字符串时间 ----------------------------------------------------------------------------- res1time.localtime(654126574) print(res1 ) #res1time.struct_time(tm_year1990, tm_mon9, tm_mday24, tm_hour…

数学大世界杂志数学大世界杂志社数学大世界编辑部2022年第7期目录

名家论坛《数学大世界》投稿&#xff1a;cn7kantougao163.com 新时期高中数学课堂教学有效性的提升策略 姜徳余; 3-5 化“零”为整&#xff0c;以“构”促学——小学数学结构化教学策略探析 孟龙平; 6-8 做反思型教师&#xff0c;加强数学衔接模块教学 陈小菊; 9-1…

[附源码]Python计算机毕业设计SSM基于远程协作的汽车故障诊断系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

SELinux

文章目录SELinux说明SELinux 的运行模式SElinux命令SELinux 是 Security-Enhanced Linux 缩写&#xff0c;安全强化的linux 系统资源都是通过程序进行访问的&#xff0c;如果将/var/www/html权限设置为777&#xff0c;代表所有程序均可以对该目录访问&#xff0c;如果已启动www…

面试官狂问八股文?我已经被三家公司问到哑口无言……

秋招刚过去&#xff0c;整体的感受是&#xff1a;面试难度和拿 offer 的难度比往年难多了&#xff0c;而且互联网还有较大的裁员风险&#xff0c;网上各种消息不断&#xff0c;有时候真是焦虑到不行。 大家还是要早做准备&#xff0c;多面试积累经验&#xff0c;有些人总想准备…

WebDAV之葫芦儿·派盘+可乐记

可乐记 支持WebDAV方式连接葫芦儿派盘。 推荐一款小巧好用的便签类记事本软件,它能够帮助用户在手机上快捷的记录一些代办事项或者是当做一个日记本来记录心情,小容量设备的福音,它就是可乐记。 可乐记这款软件的界面非常的简单,用户在首页就能看到最近所创建的标签,用…

服务器远程端口怎么修改

服务器远程端口怎么修改 修改Windows系统实例默认远程端口 以Windows Server 2012为例介绍如何修改Windows系统实例默认远程端口。 远程连接进入服务器后修改注册表子项PortNumber的值。 按快捷键 Win&#xff08;Windows 徽标键&#xff09;R&#xff0c;启动运行窗口。输…

机器学习-模型评估与选择(待更新)

本章主要讲解机器学习的基础知识&#xff0c;有关一些专业术语的定义与解释。 文章目录2.1 经验误差与过拟合2.2 评估方法2.2.1 留出法2.2.2 交叉验证法2.2.3 自助法2.2.4 调参与最终模型2.3 性能度量2.3.1 错误率与精度2.3.2 查准率、查全率与F12.3.3 ROC与AUC2.1 经验误差与过…

诊断2F和14,19服务概述

关于2F 关于抑制位 关于14服务 关于19服务 在0x19服务中一般的使用顺序 1\0x19服务01子服务 通过状态掩码去查找与其相匹配的故障个数。 通过该服务诊断仪能够请求ECU中DTC状态与DTC状态掩码相匹配的故障码个数。如果某一个故障码的实际状态位为“1”&#xff0c;并且DTC状…

医院设置模块查询和删除功能的设计与实现

一、医院设置模块需求 医院设置主要是用来保存开通医院的一些基本信息&#xff0c;每个医院一条信息&#xff0c;保存了医院编号&#xff08;平台分配&#xff0c;全局唯一&#xff09;和接口调用相关的签名key等信息&#xff0c;是整个流程的第一步&#xff0c;只有开通了医院…

UGUI性能优化学习笔记(三)图片和图集

一、图片 1.1 纹理压缩 虽然我们可以将JPG、PNG之类的格式导入Unity作为纹理的源文件&#xff0c;但实际上&#xff0c;在导入Unity后&#xff0c;会自动对其进行纹理压缩。 为什么要进行纹理压缩&#xff1f; 每像素位数 (bpp) 表示单个纹理像素所需的存储量。bpp 值越低的…

简述供应链系统商品全生命周期管理价值,助力家用电器行业实现商品管理数字化

如今&#xff0c;随着数字化浪潮和消费升级叠加背景下&#xff0c;越来越多企业开始加速推进数字化的改造与升级&#xff0c;而家用电器行业作为我国经济发展不可或缺的中坚力量&#xff0c;现阶段许多家电企业的数字化管理水平还停留在初级阶段&#xff0c;难以适应变化多样的…

从弹性计算到数据处理——亚马逊云科技re:Invent

在2022亚马逊云科技re:Invent大会上&#xff0c;亚马逊云科技首席执行官Adam Selipsky说&#xff1a;“在今后的五年&#xff0c;我们创建了这些数据&#xff0c;可能会完全超过了数码时代一直到现在以来所有数据累加在一起的数量&#xff0c;这样同时也会告诉我们所有的组织都…

有哪些舆情监控方法,舆情监控工作机制?

一、舆情监控方法 1&#xff0c;组建新闻报道社会舆论舆情监控队伍 在言论高度自由的网络时代&#xff0c;人人都是自媒体&#xff0c;人人皆可表达意见。透过成立一队人才队伍的新闻报道社会舆论舆情监控各队能协助民营企业及时发现高度关注网络实时&#xff0c;迅速开展正面…

iphone13 ios 16.2降级15.6刷机教程

最近&#xff0c;更新了最新的ios16.2之后&#xff0c;系统经常出现卡屏卡死和异常耗电情况&#xff0c;最终决定对手机进行系统降级处理&#xff0c;下面是我的一个刷机过程。 目录 一、下载电脑版爱思助手 二、下载ios15.6版本固件 三、导入固件到爱思助手 四、刷机过程中…

Docker——自定义镜像

目录 一、镜像结构 二、Dockerfile 2.1 案例&#xff1a;基于Ubuntu镜像构建一个新镜像&#xff0c;运行一个java项目 2.1.1 新建文件夹docker-demo 2.1.2 拷贝docker-demo.jar到docker-demo 2.1.3 将jdk8.tar.gz文件放到docker-demo目录 2.1.4 将Dockerfile移动到docker-demo…