舌尖上的IoC

2023-11-02 05:30
文章标签 ioc 舌尖

本文主要是介绍舌尖上的IoC,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

欢迎关注JavaTree与我们一起探讨
什么是IoC

一般的编程中,对于一个对象A,如果要使用A中的方法或属性,那么是需要手动进行初始化这个对象的,比如Interface A = new InterfaceImpl();来进行初始化,也可以通过JNDI的命名接口来得到,使用结束后对象A跟随被销毁或随着生命周期的结束而结束,但是这个对象始终会和其他的接口或者类耦合起来。类似于做饭,我需要自己去市场买菜,洗菜、烧水、做饭,炒菜,端到桌子上来,吃完,丢掉,完成一顿晚饭。

而IoC做了什么呢?类似一个保姆,我们在出门之前告诉他,今天我11点半回家,然后我想吃芹菜炒肉,然后我们就可以走了,11点半的时候回家,保姆就把菜已经做好放在桌子上,我们吃完,睡午觉,继续去写代码,如果菜不好吃,那么我们也不必自己去扔,只需要跑出一个异常,保姆就会处理。

程序员要做的,就只是在代码中告诉IoC这里需要什么,在什么时候要拿他做什么,不需要去关系这个对象的生命周期或者说要如何实例化它

Spring-IoC

SpringIoC主要利用依赖注入来实现的,用户针对接口编程,而等运行期,框架再根据定义的注入方式,将对象在合理的时间生成后‘注入’到调用的地方,将用户对于对象的控制权交由spring,就是控制反转IoC,而spring控制的方式就是将适合的对象注入到调用的位置,实现功能。类似于上面的例子,spring做的只是按时把饭做好,放到桌子上,这就是注入,而我在早上就已经定义好了11点半要去吃饭,至于什么饭,是我提前交代给保姆的,然后保姆就利用这段时间把饭做好,放到桌子上。我把做饭、丢垃圾的这些工作交给保姆,就是所谓的控制反转,保姆做饭放到桌子上,就是依赖注入。

Spring依赖注入的形式

1、 构造器注入:

这是最简单也最好懂的一种模式。

首先我们定义个接口
这里写图片描述
是一顿午餐
这里写图片描述
这是我们的一顿美味
这里写图片描述
这个就是一顿糟糕的饭

传统的:
这里写图片描述
我们会因为一些因素而按部就班去做饭,去炒菜,可能好吃,也可能不好吃(对于我这是不存在的),但是你始终需要去做很多事情,比如初始化,比如销毁等等等等。

IoC构造器注入:
这里写图片描述

首先我们需要一个保姆(当然)。

然后由保姆做饭来决定今天吃什么

那么我们的吃就可以这么改
这里写图片描述

我们只需要告诉spring,我们需要一顿饭,并且要调用eat这个方法,那么具体注入进来的是什么,不由这个类决定,就是所谓的控制反转。那么何时注入,由保姆决定,保姆根据某些条件(预先定义,比如周一吃鱼,周二吃鸟)来决定注入什么,这就是依赖注入。上面这个例子就是简单的构造器注入。

——如果你还不明白,我选择放弃

2、 Setter注入

这个我觉得蛮简单的,估计不用说你们也会了,举一反三和上面构造器是一样的,setter本身就是干这个的

3、 自动装配

这个就厉害了,上面的两种虽然方便,但是使用起来还是有些不爽,自动装配则是通过我们自己定义在配置文件中的bean标签来实现,可以通过名称、数据类型、等配置方法来进行自动装配。

这样spring就能自动找到所有名称为lunch的变量,然后装配为GoodMeat的对象,实现依赖注入,而autowired则是指明通过名称或者通过类型来进行注入。

当然也可以通过@Autowired来进行注解,注解了这个的变量,无需写setter和getter,就可以自动装配生成对象,或者使用@Resource来标注,@Autowired注解按照类型装配对象,结合注解@Qualifier可以一起使用,而@Resource则是通过byName来装配,但是都能够达到我们的要求。

自动装配bean中的autowired属性:

byName:根据名称注入,也就是说会去寻找所有名称为指明id的所有对象然后注入对应的class实例

byType:根据类型注入,根据配置的class属性去寻找,也就是@Autowired的作用

no:不支持自动装配,采用手动装配

default:表示默认采用上一级标签的自动装配的取值。如果存在多个配置文件的话,那么每一个配置文件的自动装配方式都是独立的。

Constructor:使用构造器注入方式注入

Autodetect:自动选择:如果对象没有无参数的构造方法,那么自动选择constructor的自动装配方式进行构造注入。如果对象含有无参数的构造方法,那么自动选择byType的自动装配方式进行setter注入。

这篇关于舌尖上的IoC的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/328436

相关文章

Spring6详细学习笔记(IOC+AOP)

一、Spring系统架构介绍 1.1、定义 Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)。Spring官网 Spring是一款主流的Java EE 轻量级开源框架,目的是用于简化Java企业级引用的开发难度和开发周期。从简单性、可测试性和松耦合度的角度而言,任何Java应用都可以从Spring中受益。Spring框架提供自己提供功能外,还提供整合其他技术和框架

spring ioc容器的原理

1. IoC理论的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑。 图1:软件系统中耦合的对象 如果我们打开机械式手表的后盖,就会看到与上面类似的情形,各个齿轮分别带动时针、分针和秒针顺时针旋转,从而在表盘上产生正确的时间。图1中描述的就是这样的一个齿轮组,它拥有多个独立的齿轮,这些齿轮相互啮合在一起,协

SpringIOC源码分析(六)__IOC容器的初始化__BeanDefinition载入注册

一、前情提要 上一篇提到了IOC容器初始化的流程,及资源定位,本篇主要分析BeanDefinition的载入过程 二、BeanDefiniton载入解析 BeanDefinition是IOC容器对Bean的数据承载模型,IOC容器对Bean的管理和依赖注入的实现,是通过对BeanDefinition的各种操作来实现的,IOC容器通过一个HashMap来保持和维护这些BeanDefinit

SpringIOC源码分析(五)__IOC容器的初始化__资源加载

一、IOC容器初始化过程 IOC容器初始化是由如上篇所讲到的refresh(),方法来启动的,启动包括BeanDefinition的Resource定位,载入和注册这个主要过程。 过程一:resource定位,是由resourceLoader通过getResource(String location) 的接口来完成的。过程二:将用户定义的Bean表示为IOC容器的内部数据结构BeanDef

Spring-容器:IOC-基于XML管理Bean

目录 一、概述1.1、定义1.2、简介1.3、作用1.4依赖注入1.4.1定义1.4.2作用1.4.3实现方式1.5实现 二、基于XML管理Bean(了解)2.1、获取Bean的方式2.2、依赖注入2.2.1、根据setter注入2.2.2、根据构造器注入 2.3、特殊值处理2.3.1、字面量赋值2.3.2、null值2.3.3、xml实体2.3.4、CDATA节 2.4、为对象类型属性赋

【Spring基础1】- Spring 启示录-理解IoC控制反转

目录 1-1 通过代码引出Spring分析上述程序问题 1-2 OCP 开闭原则1-3 依赖倒置原则(DIP原则)1-4 控制反转IoC1-5 Spring框架 1-1 通过代码引出Spring 假设有 MVC 三层模式下,有 Dao、Service、Web层 Dao 实现了 UserDao、UserDaoImplForMySQLServic 实现了 UserServic

Spring(三):IoC容器装配Bean(xml配置方式和注解方式)

XML配置方式 一、三种实例化Bean的方式 1.使用类构造器实例化(默认无参数) <bean id=“personService" class="cn.itcast.bean.impl.PersonServiceImpl"/> 2.使用静态工厂方法实例化 <bean id="personService"          class="com.itcast.factory.PersonSe

Spring(二):IOC和DI的理解

一、IOC和DI的理解         在平时的java应用开发中,我们要实现某一个功能或者说是完成某个业务逻辑时至少需要两个或以上的对象来协作完成,在没有使用Spring的时候,每个对象在需要使用他的合作对象时,自己均要使用像new object() 这样的语法来将合作对象创建出来,这个合作对象是由自己主动创建出来的,创建合作对象的主动权在自己手上,自己需要哪个合作对象,就主动去创建,创建合作

Spring6学习笔记2:容器IoC

文章目录 3 容器:IoC3.1 IoC容器3.1.2 依赖注入3.1.3 IoC容器在Spring的实现 3.2 基于XML管理Bean3.2.1 搭建子模块spring6-ioc-xml3.2.2 实验一:获取bean①方式一:根据id获取②方式二:根据类型获取③方式三:根据id和类型④注意的地方⑤扩展知识:一个接口实现类获取过程 3.2.3 实验二:依赖注入之setter注入3.2.4

sping IoC设计模式好处与劣势

Spring IOC 好处和劣势                分类:            技术文档 2012-03-26 15:15 4225人阅读 评论(0) 收藏 举报 ioc spring xml 编程 jboss hibernate IoC是什么?Inversion of Control,即反转控制,或许说为依赖注入更为合适。IoC就是IoC,不是