前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring的IOC容器类别概述

Spring的IOC容器类别概述

作者头像
朱季谦
发布2021-07-08 15:31:41
4440
发布2021-07-08 15:31:41
举报

Spring的IOC该如何理解呢?

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

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

代码语言:javascript
复制
@Resource
private DemoService demoService;

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

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

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

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

代码语言:javascript
复制
@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容器一般如下:

代码语言:javascript
复制
XXXServiceImpl XXXService = SpringContextUtils.getBean(XXXServiceImpl.class);

再封装SpringContextUtils工具——

代码语言:javascript
复制
@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。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-07-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档