Spring的IOC容器类别概述

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。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 三条路线告诉你如何掌握Spring IoC容器的核心原理

    前三篇已经从历史的角度和大家一起探讨了为什么会有Spring,Spring的两个核心概念:IoC和AOP的雏形,Spring的历史变迁和如今的生态帝国。本节的主...

    Java后端技术
  • Spring(2)——Spring IoC 详解

    Spring IoC 概述 IoC:Inverse of Control(控制反转) 读作“反转控制”,更好理解,不是什么技术,而是一种设计思想,就是将原本在程...

    我没有三颗心脏
  • Spring源码深度解析(一)

    如果要调用A的method()方法,而method方法又依赖于B的某些处理。原生方式: A a = new A(); B b = new B(); a.s...

    张申傲
  • Spring核心--容器详解

    从概念上讲:Spring 容器是 Spring 框架的核心,是用来管理对象的。容器将创建对象,把它们连接在一起,配置它们,并由其通过IoC技术管理,串联他们的整...

    哲洛不闹
  • Spring-BeanFactory解读

    Spring通过一个配置文件描述Bean和Bean之间的依赖关系,利用Java反射功能实例化Bean,并建立Bean之间的依赖关系。

    小小工匠
  • 【死磕 Spring】----- IOC 之深入理解 Spring IoC

    在一开始学习 Spring 的时候,我们就接触 IoC 了,作为 Spring 第一个最核心的概念,我们在解读它源码之前一定需要对其有深入的认识,本篇为【死磕 ...

    用户1655470
  • Spring 中的 IoC 容器

    对于 Java 后端开发而言,Spring 框架的重要性不言而喻。而 Spring 中最核心的无非就是 IoC 和 AOP。

    WriteOnRead
  • Spring IoC、面向切面编程、事务管理等Spring基本概念详解

    控制反转是一种通过描述(在java中通过xml或者注解)并通过第三方去产生或获取特定对象的方式。

    宜信技术学院
  • 五万字长文带你学会Spring

    Sping:Spring是分层的javaEE/SE应用full-stack轻量级开源框架,他以AOP( 面向切面编程 aspect oriented prog...

    一只胡说八道的猴子
  • 谈谈 Spring IOC

    学习过 Spring 框架的人一定都会听过 Spring 的 IoC(控制反转) 、DI (依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC 、...

    一个优秀的废人
  • 用IDEA详解Spring中的IoC和DI(挺透彻的,点进来看看吧)

    控制反转(IoC)是一个比较抽象的概念,它主要用来消减计算机程序的耦合问题,是Spring框架的核心。 依赖注入(DI)是IoC的另外一种说法,只是从不同的角度...

    泰斗贤若如
  • 快速学习-Spring概述

    cwl_java
  • 如何能理解 Spring 框架的思想?

    Spring 是一个轻量级的开源的 JavaEE 框架,由作者 Rod Johnson 创建,兴起于 2003 年。目的是为了解决企业级开发的复杂性问题,Spr...

    CSDN技术头条
  • 依赖注入和控制反转

    学习过Spring框架的人一定都会听过Spring的IoC(控制反转) 、DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC 、DI这两个概...

    AlbertZhang
  • Spring学习(1)——快速入门

    认识 Spring 框架 Spring 框架是 Java 应用最广的框架,它的成功来源于理念,而不是技术本身,它的理念包括 IoC (Inversion of ...

    我没有三颗心脏
  • 浅析IOC 和 DI

      学习过spring框架的人一定都会听过Spring的IoC(控制反转) 、DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC 、DI这两...

    Kevin_Zhang
  • Spring框架源码脉络分析(一):IoC与容器、Bean和BeanDefinition

    IoC:即控制反转机制。在Spring中的实现表现为IoC容器,属于Spring Core模块最核心的部分。

    星如月勿忘初心
  • Spring5–01–Spring5框架概述

    Java架构师必看
  • 定义Bean:什么是BeanDefinition?

    上一周主要是针对Spring IoC 容器的概述,包括Spring IoC 依赖查找、依赖注入、依赖来源、配置元信息、容器、应用上下文以及Spring IoC ...

    码农架构

扫码关注云+社区

领取腾讯云代金券