IoC控制反转

article/2025/11/6 21:54:09

IoC控制反转

    • 一、IoC概念和原理
      • 1. 什么是IoC
      • 2. IoC底层原理
    • 二、IoC过程
      • 1. xml配置文件,配置创建的对象
      • 2. 有UserService和UserDao类,创建工厂类
    • 三、IoC接口
      • 1. IoC思想基于IoC容器完成,IoC容器底层就是Bean工厂
      • 2. Spring提供实现IoC容器的两种方式(两个接口)
      • 3. ApplicationContext接口的实现类
    • 四、IoC操作
      • 1.Bean管理
      • 2. Bean管理操作的两种方式
      • 3. IoC操作Bean管理(基于xml方式实现)
        • 基于xml方式创建对象
        • 基于xml方式注入属性
        • bean作用域
        • bean生命周期
        • xml自动装配
        • 外部属性文件
      • 4. IoC操作Bean管理(FactoryBean)
      • 5. IoC操作Bean管理(基于注解方式)

一、IoC概念和原理

1. 什么是IoC

(1) 控制反转:把对象创建和对象之间的调用过程,交给Spring进行管理。
(2)使用IoC目的:降低耦合性

2. IoC底层原理

(1)xml解析、工厂模式、反射

二、IoC过程

1. xml配置文件,配置创建的对象

<!--配置创建的对象-->
<bean id="dao" class="com.jxk.UerDao"></bean>

2. 有UserService和UserDao类,创建工厂类

class UserFactory{public static UserDao getDao(){String classValue = class属性值;//1.xml解析Class clazz = Class.forName(classValue);//2.通过反射创建对象return (UserDao)clazz.newInstance();}
}

三、IoC接口

1. IoC思想基于IoC容器完成,IoC容器底层就是Bean工厂

2. Spring提供实现IoC容器的两种方式(两个接口)

1)BeanFactory :IoC容器基本实现,是Spring内部使用的接口,不提供开发人员使用。
BeanFactory加载配置文件时不创建对象,在获取对象(使用)时才创建
2)ApplicationContext :实际是BeanFactory的子接口,提供更强大的功能,提供给开发人员使用。
ApplicationContext加载配置文件时就创建对象

3. ApplicationContext接口的实现类

在这里插入图片描述

四、IoC操作

1.Bean管理

0)什么是Bean管理:Bean管理指的是两个操作
1)Spring创建对象
2)Spring注入属性

2. Bean管理操作的两种方式

1)基于xml配置文件实现
2)基于注解方式实现

3. IoC操作Bean管理(基于xml方式实现)

基于xml方式创建对象

<!--配置创建的对象-->
<bean id="user" class="com.jxk.UserDao"></bean>

1) 在Spring配置文件中,使用bean标签,标签里面添加对应属性,就可以实现对象创建。
2) 常用属性:
id:唯一标识
class:类全路径(包类名)
3) 创建对象时,默认调用无参构造函数进行创建

基于xml方式注入属性

DI:依赖注入,就是注入属性
第一种注入方式:set方法
首先创建类,定义属性和对应的set方法
在这里插入图片描述
然后在Spring配置文件中配置创建对象配置属性注入(基于set方法)
在这里插入图片描述
第二种注入方式:使用有参构造函数
首先创建类,定义属性并生成相应的有参构造函数:

/*** 使用有参构造注入属性*/
public class Orders {//定义属性private String oname;private String address;//生成有参构造函数public Orders(String oname, String address) {this.oname = oname;this.address = address;}//测试函数public void OrdersTest(){System.out.println(oname+"::"+address);}
}

然后在Spring的xml配置文件中注入属性(有参构造方法)

<!-- 使用有参构造函数注入属性 --><bean id="orders" class="com.jxk.Spring5.Orders"><constructor-arg name="oname" value="电脑"></constructor-arg><constructor-arg name="address" value="China"></constructor-arg></bean>

bean作用域

在Spring里,可以设置创建的实例是单实例还是多实例。
scope属性值:第一个值 默认值,singleton,表示单实例对象;第二个值 prototype 表示多实例对象。
singleton和prototype区别:
singleton:加载配置文件时就会创建单实例对象
prototype:在调用getBean方法时创建多实例对象。
request
session

bean生命周期

  1. 无参构造器创建bean实例
  2. 使用类中的set方法设置属性值和对其他bean引用
  3. 把bean实例传递bean后置处理器的方法postProcessBeforeInitialization
  4. 调用bean的初始化方法(需要进行配置初始化的方法InitMethod)
  5. 把bean实例传递bean后置处理器的方法postProcessAfterInitialization
  6. bean可以使用了(获取到创建的对象之后)
  7. 当容器关闭的时候,调用bean的销毁的方法(需要进行配置销毁的方法DestroyMethod)

xml自动装配

  1. 什么是自动装配?根据指定装配规则(属性名称或者属性类型),Spring自动将匹配的属性值进行注入
  2. 实现自动装配:
    bean标签属性autowire,配置自动装配
    autowire属性常用两个值:byName,byType

外部属性文件

第一种方法: 直接配置连接池
第二种方法:引入外部属性文件配置数据库连接池(1. 创建外部属性文件,properties格式文件,写数据库信息;2. 把外部properties属性文件引入到Spring配置文件中,即引入context标签,然后使用标签引入外部属性文件)

4. IoC操作Bean管理(FactoryBean)

  1. Spring有两种类型bean,一种普通bean,另外一种工厂bean
  2. 普通bean:在配置文件中定义bean类型就是返回类型
  3. 工厂bean:在配置文件中定义bean类型可以和返回类型不同
    第一步:创建类,让这个类作为工厂bean,实现接口FatoryBean
    第二步:实现接口里面的方法,在实现的方法中定义返回的bean类型

5. IoC操作Bean管理(基于注解方式)

  1. 什么是注解?
    注解是代码的特殊标记,格式:@注解名称(属性名称=属性值,属性名称=属性值)
    使用注解,作用在类、方法、属性上面
    目的:简化xml配置
  2. Spring针对Bean管理中创建对象提供注解
    (1)@Component
    (2)@Service
    (3)@Controller
    (4)@repository
  3. 提供注解步骤
    1)引入AOP依赖 jar包
    2)开启组件扫描:如果扫描多个包,多个包使用逗号隔开;
<context:component-scan base-package="com.jxk"></context:component-scan>

3)创建类,在类上卖弄添加创建对象注解
//在注解里面value属性值可以省略不写
//默认值是类名称,首字母小写
4. 开启组件扫描细节配置(include、exclude)
5. 基于注解方式实现属性的注入
(1)@Autowired:根据属性类型进行自动装配

(2)@Qualifier:根据属性名称进行注入(与Autowired一起使用)
(3)@Resource :可以根据类型注入,可以根据名称注入
(4)@Value:注入普通类型
6. 完全注解开发步骤
1)创建配置类,替代xml配置文件

@Configuration//作为配置类,替代xml文件
@ComponentScan(basePackages={"com.jxk"}

2)编写测试类

//1. 加载配置类
ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
//2. 获取配置创建的对象
UserService userService = context.getBean("userService",UserService.class);
userService.add();

http://chatgpt.dhexx.cn/article/UkanHWR7.shtml

相关文章

IOC 控制反转

文章目录 一.IOC概念二. IOC的体现三.ioc的技术实现三.基于XML的DI1.引用类型属性自动注入 四.包含关系的配置文件五.基于注解的DI五.简单类型的属性赋值1.vaule(简单类型的属性赋值&#xff09;2.自动注入 一.IOC概念 IOC&#xff1a;控制反转&#xff0c;是一个理论&#xf…

浅谈控制反转(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…