Spring的IOC该如何理解呢?

平常在一个方法当中,若要用到外部另一个类里的非静态方法,首先,需要先通过new一个对象,再根据这个对象去调用其方法。若只需要一两个对象还好,一旦涉及的外部对象多了,就要创建一大堆new,管理起来就很麻烦。这时候,IOC的思想就起到关键作用了,它可以实现把创对象创建与操作统一交给框架管理。那么,新创建的对象都是怎么存在spring框架当中的呢?其实,这里面就用到了Map缓存。你可以简单这样理解,spring就像一个map容器,bean都存放在这个map里,若要用到map里存放的对象,就可以通过一个key去map里获取,这个key,可以是id或者bean的默认名。

以后,若要用到这个对象,例如spring最简单的如注解方式——

@Resource
private DemoService demoService;

如此定义之后,Spring框架就会帮我们自动创建一个DemoService单例对象,然后将demoService引用指向对象的地址,接下来,就可以直接通过引用demoService变量调用DemoService里的方法了。至于Spring如何通过注解方式来实现调用Bean对象的,后面会专门写一篇文章介绍。

Spring给我们提供两种类型的IoC容器实现,通过这两种IOC容易,可以生成bean,并获取bean:

  1. 实现了BeanFactory接口的基本IoC容器。
  2. 实现了ApplicationContext接口的高级IoC容器。

实现BeanFactory接口的基本IoC容器一般如下:

@Test
public void createWithNullTarget() {
Resource resource = new ClassPathResource("myBean.xml");
// 构造工厂
DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
// 新增Xml阅读器
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);
// 规则注册入容器
reader.loadBeanDefinitions(resource);
Pet person = factory.getBean(Pet.class);
System.out.println(person.toString());
}

实现了ApplicationContext接口的高级IoC容器一般如下:

XXXServiceImpl XXXService = SpringContextUtils.getBean(XXXServiceImpl.class);

再封装SpringContextUtils工具——

@Component
public class SpringContextUtils implements ApplicationContextAware { private static ApplicationContext applicationContext; @Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
public static <T> T getBean(Class<T> clazz) {
return getApplicationContext().getBean(clazz);
}
}

实际应用当中,多是使用ApplicationContext接口的高级IoC容器来获取Spring管理的bean。

Spring的IOC容器类别概述的更多相关文章

  1. spring框架--IOC容器,依赖注入

    思考: 1. 对象创建创建能否写死? 2. 对象创建细节 对象数量 action  多个   [维护成员变量] service 一个   [不需要维护公共变量] dao     一个   [不需要维护 ...

  2. Spring的IOC容器第一辑

    一.Spring的IOC容器概述 Spring的IOC的过程也被称为依赖注入(DI),那么对象可以通过构造函数参数,工厂方法的参数或在工厂方法构造或返回的对象实例上设置的属性来定义它们的依赖关系,然后 ...

  3. spring在IoC容器中装配Bean详解

    1.Spring配置概述 1.1.概述 Spring容器从xml配置.java注解.spring注解中读取bean配置信息,形成bean定义注册表: 根据bean定义注册表实例化bean: 将bean ...

  4. Spring框架IOC容器和AOP解析

    主要分析点: 一.Spring开源框架的简介  二.Spring下IOC容器和DI(依赖注入Dependency injection) 三.Spring下面向切面编程(AOP)和事务管理配置  一.S ...

  5. Spring之IOC容器加载初始化的方式

    引言 我们知道IOC容器时Spring的核心,可是如果我们要依赖IOC容器对我们的Bean进行管理,那么我们就需要告诉IOC容易他需要管理哪些Bean而且这些Bean有什么要求,这些工作就是通过通过配 ...

  6. 在Servlet(或者Filter,或者Listener)中使用spring的IOC容器

    web.xml中的加载顺序为:listener > filter > servlet > spring. 其中filter的执行顺序是filter-mapping在web.xml中出 ...

  7. Spring的IoC容器

    Spring是一个轻量级的Java开发框架,其提供的两大基础功能为IoC和AOP,其中IoC为依赖反转(Inversion of Control).IOC容器的基本理念就是"为别人服务&qu ...

  8. SpringMVC系列(十五)Spring MVC与Spring整合时实例被创建两次的解决方案以及Spring 的 IOC 容器和 SpringMVC 的 IOC 容器的关系

    一.Spring MVC与Spring整合时实例被创建两次的解决方案 1.问题产生的原因 Spring MVC的配置文件和Spring的配置文件里面都使用了扫描注解<context:compon ...

  9. spring的Ioc容器与AOP机制

    为什么要使用Spring的Ioc容器? 1.首先,spring是一个框架,框架存在的目的就是给我们的编程提供简洁的接口,可以使得我们专注于业务的开发,模块化,代码简洁,修改方便. 通过使用spring ...

  10. Spring扩展:Spring的IoC容器(注入对象的方式和编码方式)

    二.Spring的IoC容器 IoC:Inversion of Control(控制反转) DI:Dependency Injection(依赖注入) 三.依赖注入的方式 (1)构造注入 (2)set ...

随机推荐

  1. 有隙可乘 - Android 序列化漏洞分析实战

    作者:vivo 互联网大前端团队 - Ma Lian 本文主要描述了FileProvider,startAnyWhere实现,Parcel不对称漏洞以及这三者结合产生的漏洞利用实战,另外阐述了漏洞利用 ...

  2. 新手【BUUCTF】逆向writeup()

    0x00前言 在大三开始入门逆向,已学完小甲鱼解密篇,刚开始看<加密与解密>,现在沉浸在快 乐的刷题学习中..... buuctf_reverse地址 0x01刚接触的逆向题 revers ...

  3. uniapp video组件全屏导致页面横竖错乱问题

    uniapp video组件全屏导致页面横竖错乱问题 背景介绍 使用 video组件做一个视频播放功能,不全屏的情况正常.在苹果手机上全屏后,点击左上角退出全屏,页面出现问题如下图问题,主要系统iOS ...

  4. 可视化学习:使用极坐标参数方程和SDF绘制有趣的图案

    前言 本文将介绍如何使用极坐标参数方程和上一篇文章提到的距离场SDF来绘制有趣的图案. 说到曲线和几何图形的绘制,我们知道图形系统默认支持的是通过直角坐标绘制,但是有些曲线呢,不太容易使用直角坐标系来 ...

  5. 简单 python 爬虫(爬取小说网)

    #https://blog.csdn.net/Isana_Yashiro/article/details/84582946 import requestsfrom bs4 import Beautif ...

  6. objectarx 之让用户自定义插件命令

    #include <iostream> #include <fstream> virtual AcRx::AppRetCode On_kInitAppMsg (void *pk ...

  7. .net core 5,6,7【多线程笔记】取消令牌(CancellationToken) CancellationTokenSource

    介绍 在使用C#异步的场景,多多少少会接触到CancellationTokenSource.它和取消异步任务相关的,CancellationToken就是它生产出来的. 演示 任务取消执行回调 var ...

  8. Xcode 最近使用的一些问题

    1.上架的App如何测试推送? 苹果的证书分为开发证书和发布证书,上架AppStore的App应该使用发布证书进行配置,但是发布证书编译出包的App无法安装到手机上 只有一种方式,采用Ad hoc p ...

  9. uniapp 判断当前是保存还是修改操作

    步骤分析: 首先得确定你进入表单后传入了id或者整个对象[这里使用id来进行讲解]其次就是两个请求:POST(保存的) 和 PUT(修改的)最后就是通过传入的id是否存在进行判断即可  POST 请求 ...

  10. 搜狗五笔 date 自定义时间格式

    搜狗五笔 date 自定义时间格式 搜狗五笔 date 默认打出的是"2023-6-15",如果需要"2023-06-15",则需要在自定义短语中设置 属性设置 ...