IOC 控制反转

article/2025/11/6 21:52:19

文章目录

  • 一.IOC概念
  • 二. IOC的体现
  • 三.ioc的技术实现
  • 三.基于XML的DI
    • 1.引用类型属性自动注入
  • 四.包含关系的配置文件
  • 五.基于注解的DI
  • 五.简单类型的属性赋值
    • 1.@vaule(简单类型的属性赋值)
    • 2.自动注入

一.IOC概念

IOC:控制反转,是一个理论,概念,思想。
描述的:把对象的创建,赋值,管理工作都交给代码之外的容器实现,也就是对象的创建是有其它外部资源完成。

控制:创建对象,对象的属性赋值,对象之间的关系管理。

反转:把原来的开发人员管理,创建对象的权限转移给代码之外的容器实现。由容器代替开发人员管理对象。创建对象,给属性赋值。

正转:由开发人员在代码中,使用new 构造方法创建对象,开发人员主动管理对象。

容器:是一个服务器软件,一个框架(spring)

为什么要使用ioc:目的就是减少对代码的改动,也能实现不同的功能。实现解耦合。


二. IOC的体现

在这里插入图片描述

servle是Tomcat服务器创建的。Tomcat也称为容器

Tomcat作为容器:里面存放的有servlet对象,Listener,Filter对象


三.ioc的技术实现

DI是ioc的技术实现

DI:依赖注入,只需要在程序中提供要使用的对象的名称就可以,至于对象如何在容器中创建,赋值,查找都由容器内部实现。

spring使用的di实现了ioc的功能,spring底层创建对象,使用的是反射机制。

spring是一个容器,管理对象,给属性赋值,底层是反射创建对象。

spring默认创建对象的时间:在创建spring的容器时,会创建配置文件中的所有的对象
spring创建对象:默认调用的是无参数构造方法


三.基于XML的DI

di的实现有两种:
1.在spring的配置文件中,使用标签和属性完成,叫做基于XML的di实现
2.使用spring中的注解,完成属性赋值,叫做基于注解的id实现

di的语法分类:
1.set注入(设置注入):spring要调用类的set方法,在set方法可以实现属性的赋值。(80左右都是使用的set注入)
2.构造注入,spring调用类的有参数构造方法,创建对象。在构造方法中完成赋值。

简单类型:spring中规定Java的基本数据类型和string都是简单类型di给属性赋值:1.set注入(赋值):spring调用类的set方法,set方法中完成属性赋值(1)简单类型的set注入<bean id="xx" class="yyy"><property name="属性名字" value="此属性的值"/>一个property只能给一个属性赋值<property.....></bean>(2)引用类型的set注入:spring调用类的set方法<bean id="xxx" class="yyy"><property name="属性名称" ref="bean的id“(对象的名称)/><bean/>2.构造注入:spring调用类的有参数构造方法,在创建对象的同时,在构造方法中给属性赋值构造注入使用<constructor-arg>标签:一个<constructor-arg>表示构造方法的一个参数属性:name:表示构造方法的形参名index:表示构造方法的参数的位置,参数从左往右是012的顺序value:构造方法的形参类型是简单类型的,使用valueref:构造方法的形参类型是引用类型的,使用ref

1.引用类型属性自动注入

引用类型的自动注入:spring框架根据某些规则可以给引用类型赋值。不用你再给引用类型赋值
使用的规则常用的是byName,byType

1.byName(按名称注入):java类中引用类型的属性名和spring容器中(配置文件)的id名称一样。且数据类型是一致的,这样的容器中的bean,spring能够赋值给引用类型。

语法:

 <bean id="xx" class="yyy" autowire="byName">简单类型属性赋值
<bean/>

2.byType(按类型注入):Java类中引用类型的数据类型和spring容器中(配置文件)class属性是同源关系的,这样的bean能够赋值给引用类型

同源就是一类的意思:
①Java类中引用类型的数据类型和beanb的class的值是一样的。
②Java类中引用类型的数据类型和bean的class的值是父子类关系的。
③Java类中引用类型的数据类型和bean的class的值是接口和实现类关系的。

语法

  <bean id="xx" class="yyy" autowire="byType">简单类型属性赋值
<bean/>

注意:在byType中,在xml配置文件中声明bean只能有一个符合条件的,多余一个是错误的。


四.包含关系的配置文件

spring-total表示主配置文件:包含其它的配置文件的,主配置文件一般是不定义对象的。

语法:

  <import rescourse="其它配置文件的路径"/>

关键字:“classpath”:表示类路径(class文件所在的目录),在spring的配置文件中要指定其它文件的位置,需要使用classpath,告诉spring到哪去加载读取文件


五.基于注解的DI

概念:通过注解完成Java对象创建,属性赋值

使用注解的步骤:
1.加入maven依赖 spring-context,在加入spring-context的同时,间接加入spring-aop依赖。
使用注解必须使用spring-aop依赖

2.在类中加入spring的注解(多个不同功能的注解)
3.在spring的配置文件中,加入一个组件扫描器的标签,说明注解在项目中的位置

(1)@Component:创建对象的,等同于bean的功能
属性:value就是对象的名称,也就是bean的id值,value的值是唯一的,创建的对象在整个spring的容器中就一个

位置:在类的上面

在这里插入图片描述

声明组件扫描器,组件就是Java对象
base-package:指定注解在你的项目中的包名
component-scan的工作方式:spring会扫描遍历base-package指定的包
把包中和子包中的所有类,找到类中的注解,按照注解的功能创建对象,或给属性赋值。

三种方法:
在这里插入图片描述

spring中和@Component功能一致,创建对象的注解还有:
1.@Repository(用在持久类层的上面):放在dao的实现类上面,表示创建dao对象,dao对象是能访问数据库的
2.Service(用在业务层类的上面):放在Service的实现类上面,创建Service对象,service对象是做业务处理,可以有事务等功能的。
3.@Controller(用在控制器的上面):放在控制器(处理器)类的上面,创建控制器对象的,控制器对象,能够接受用户提交的参数,显示请求的处理结果。

以上三个注解的使用语法和@Component一样的。都能创建对象,但是这三个注解还有额外的功能,给项目的对象分层

包的多个指定方式:
在这里插入图片描述


五.简单类型的属性赋值

1.@vaule(简单类型的属性赋值)

属性:value是String类型的,表示简单类型的属性值
位置:1.在属性定义的上面,无需set方法,推荐使用
在这里插入图片描述

2.在set方法的上面
在这里插入图片描述

2.自动注入

@Autowired:spring框架提供的注解,实现引用类型的赋值。
spring类中通过注解给引用类型赋值,使用的是自动注入原理,支持byName,bytype
@autowired:默认使用的是byType
属性:required,是一个Boolean类型,默认true

required=true:表示引用类型如果赋值失败,程序报错,并中止执行
required=false:引用类型如果赋值失败,程序正常进行,引用类型是null

位置:①属性定义的上面,无需set方法,推荐使用 ②在set方法的上面

使用byType:
在这里插入图片描述
使用byName
1.在属性上面加上@Autowired
2.在属性上面加入@Qualifier(value="bean的id):表示使用指定名称的bean完成赋值
在这里插入图片描述


@Resource:来自jdk中的注解,spring框架提供了对这个注解的功能支持,可以使用它给
引用类型赋值使用的也是自动注入的原理,支持byType,byName
默认是byName:先使用byName自动注入,如果byName赋值失败,再使用byType

位置:
1.在属性定义的上面,无需set方法,推荐使用
在这里插入图片描述

2.在set方法的上面

3.@Resource只使用byName方式,需要增加一个属性name



http://chatgpt.dhexx.cn/article/2n209Lbf.shtml

相关文章

浅谈控制反转(IoC)

Inversion of Control 什么是控制反转&#xff1f; 程序的流程控制权相对于传统的面向过程编程而言发生了反转。下面是维基百科的描述 In software engineering, inversion of control (IoC) is a programming principle. IoC inverts the flow of control as compared to tr…

Spring---浅谈IOC

概念 IOC&#xff08;Inversion of Control 控制反转&#xff09;是spring的核心&#xff0c;贯穿始终。所谓IOC&#xff0c;对于spring框架来说&#xff0c;就是由spring来负责控制对象的生命周期和对象间的关系。 传统开发模式与IOC开发模式的对比 传统开发模式&#xff1a;对…

控制反转-Inversion Of Control

一、控制反转 控制反转&#xff08;Inversion of Control&#xff0c;英文缩写为IoC&#xff09;把创建对象的权利交给框架&#xff0c;是框架的重要特征&#xff0c;并非面向对象编程的专业术语。它包括依赖注入&#xff08;Dependency Injection&#xff0c;简称DI&#xff…

微信小程序hamburgers汉堡包css动画

微信小程序hamburgers汉堡包css动画 源码在我的csdn里下载 https://download.csdn.net/download/ozhy111/12201373

汉堡式折叠html,美味的CSS动画汉堡包:hamburgers_html/css_WEB-ITnose

s if you insist, but they’re not accessible as a menu button. Append the class name of the type of hamburger you’re craving: Here’s the list of hamburger-type classes you can choose from: hamburger--arrowhamburger--arrow-rhamburger--arrowalthamburger--a…

LSB 题解

今天来刷一道Misc的题目&#xff0c;LSB原理进行图片隐写 LSB原理 LSB是一种利用人类视觉的局限性设计的幻术 PNG和BMP图片中的图像像素一般是由RGB(RED红 GREEN绿 BLUE蓝)三原色组成 记住&#xff0c;JPG图片是不适合使用LSB隐写的&#xff0c;JPG图片对像数进行了有损压缩…

LSB利器-zsteg

一、Usage # zsteg -h Usage: zsteg [options] filename.png [param_string] -c, --channels X channels (R/G/B/A) or any combination, comma separated valid values: r,g,b,a,rg,bgr,rgba,r3g2b3,... -l, --limi…

【linux】lsb_release -a命令

查看linux发行版本&#xff1a;lsb_release -a 运行该命令时若提示lsb_release命令不存在 不存在&#xff0c;则表明系统未安装该命令&#xff0c;报错如下&#xff1a; 解决方法&#xff1a; 查看 lsb_release 命令属于哪个软件包&#xff0c;命令为yum provides */lsb_rel…

图片LSB隐写(java)

一、隐写原理 LSB隐写原理就是图片中的像素一般是由三种颜色组成&#xff0c;即三原色(红绿蓝)。由这三种原色可以组成其他各种颜色&#xff0c;在png图片的存储中,每个颜色占有8bit,即有256种颜色&#xff0c;一共包含256的三次方颜色&#xff0c;即16777216中颜色。人类的眼睛…

LSB隐写术

前言 LSB全称为 least significant bit&#xff0c;是最低有效位的意思。Lsb图片隐写是基于lsb算法的一种图片隐写术&#xff0c;以下统称为lsb隐写&#xff0c;这是一种常见的信息隐藏方法。当然关于图像的隐写的方法有很多&#xff0c;统称为隐写术&#xff0c; lsb隐写很实…

Linux开发标准LSB简介:Linux Standard Base

目录 Unix/Linux 标准化历史 POSIX Open Group Austin Group LSB LSB 简介 组织架构 工作组 LSB 的标准化流程 认证 认证问题报告 LSB 的历史、现状和将来 实例&#xff1a;lsb_release 的规范定义和实现 结束语 Unix/Linux 标准化历史 标准化目前已经成为 Linu…

LSB 简介

Unix/Linux 标准化历史 标准化目前已经成为 Linux 系统上的一个热门话题。实际上&#xff0c;在 Linux 诞生之初&#xff0c;这个问题就得到了重视。当 Linus 在开发 0.01 版本的 Linux 内核时&#xff0c;就开始关注 POSIX 标准的发展&#xff0c;他在 /include/unistd.h 文件…

图片隐写之LSB(Least Significant Bit)原理及其代码实现

1. 什么是隐写&#xff1f; 隐写术是一门关于信息隐藏的技巧与科学&#xff0c;所谓信息隐藏指的是不让除预期的接收者之外的任何人知晓信息的传递事件或者信息的内容。隐写术的英文叫做Steganography&#xff0c;来源于特里特米乌斯的一本讲述密码学与隐写术的著作Steganogra…

MetaPhlAn2:宏基因组物种组成分析

简介 MetaPhlAn2是分析微生物群落(细菌、古菌、真核生物和病毒)组成的工具&#xff0c;它在宏基因组研究中非常有用&#xff0c;只需一条完命令即可获得微生物的物种丰度信息(扩增子物种组成需要质控、拼接、拆样本、切除引物、比对等步骤&#xff0c;此软件居然分析宏基因组这…

你想要的宏基因组-微生物组知识全在这(2023.4)

欢迎点击上方蓝色”宏基因组”关注我们&#xff01; 宏基因组/微生物组是当今世界科研最热门的研究领域之一&#xff0c;为加强宏基因组学技术和成果交流传播&#xff0c;推动全球华人微生物组领域发展&#xff0c;中科院青年科研人员创立“宏基因组”公众号&#xff0c;联合海…

Kraken2:宏基因组快速物种注释神器

简介 kraken是基于k-mer精确比对&#xff0c;并采用最LCA投票结果快速宏基因组DNA序列进行物种注释的软件。 图. Kraken2分类基本原理 该文章于2014年发表于Genome Biology&#xff0c;目前引用过两千次[1]。详见《Kraken&#xff1a;使用精确比对的超快速宏基因组序列分类软件…

Nature综述: 宏基因组关联分析-深入研究微生物组

本文由谢忠杰编译&#xff0c;董小橙、江舜尧编辑&#xff0c;本文较长&#xff0c;建议用电脑阅读。 “微生太”原创微文&#xff0c;转载已获授权。 导读 问题1&#xff1a;哪些疾病与人体微生物明确相关&#xff1f; 问题2&#xff1a;如何研究人体微生物与健康的关系&#…

Nature子刊:HUMAnN2实现宏基因组和宏转录组种水平功能组成分析

HUMAnN2实现宏基因组和宏转录组种水平功能组成分析 Species-level functional profiling of metagenomes and metatranscriptomes Nature Methods, [IF 26.919], Article, 2018-10-30 DOI: http://dx.doi.org/10.1038/s41592-018-0176-y 第一作者&#xff1a;Eric A. Franzosa…

从测序到宏基因组:聚焦菌群生信分析方法最前沿

今天是第2439期日报。 Nature子刊&#xff1a;基于三代测序的宏基因组分析助力完整微生物进化研究 Nature Methods[IF:47.99] ① 基于Pacific Biosciences或Oxford Nanopore的三代测序技术已成为获得闭环微生物基因组的常规手段&#xff0c;即使对特殊大量数据的读取&#xff0…

Protein Cell:扩增子和宏基因组数据分析实用指南

扩增子和宏基因组数据分析实用指南 A practical guide to amplicon and metagenomic analysis of microbiome data Protein Cell [IF: 10.164] DOI: https://doi.org/10.1007/s13238-020-00724-8 Review: 2020-5-11 第一作者&#xff1a;刘永鑫1,2,3, 秦媛1,2,3,4, 陈同5 通讯作…