前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring 源码学习 02:关于 Spring IoC 和 Bean 的概念

Spring 源码学习 02:关于 Spring IoC 和 Bean 的概念

作者头像
程序员小航
发布2020-12-03 11:02:09
2740
发布2020-12-03 11:02:09
举报

前言

在前一篇文章中介绍了如何构建源码阅读环境,既然构建好了源码环境,本地也可以正常运行,那就开始阅读源码吧!

在阅读源码时,会参考官方文档,很多概念在官网都可以得到答案,有兴趣的小伙伴们可以继续阅读,当做复习,写的不足之处,希望多多指导。

1

IoC 和 DI

IoC 概念

IoC

IoC(Inversion of Control),即控制反转。

之前是在对象内部 new 创建其他对象,然后使用。

而现在 Spring 中有一个容器可以在创建管理这些对象,并且将对象依赖的其他对象注入到这个对象中,这些对象的创建、销毁都由 Spring 进行管理。

相比以前来说,不再由自己控制其他对象的生命周期,这个过程就叫做控制反转。而负责统一管理这些类的容器就叫做 IoC 容器。

DI

IoC is also known as dependency injection (DI).

是不是感觉奇奇怪怪的,为什么说:IoC 也称为 DI

其实 IoC 和 DI 是同一个概念的不同角度描述。

依赖注入是指组件之间的依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。

通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。

Spring 是通过 DI 实现 IoC 的。

2

Container 和 Bean

Spring IoC container and Bean

Bean 是一个由 Spring IoC 容器实例化,组装和管理的对象。

相信大家都写过或者见过下面的代码:

/**
 * 从容器中获取对象
 * @author liuzhihang
 * @date 2020/4/6 19:02
 */
@Component
public class CustomBeanFactory implements ApplicationContextAware {

    private static ApplicationContext ctx;

    @Override
    public void setApplicationContext(ApplicationContext ac) throws BeansException {

        ctx = ac;
    }

    public static Object getBean(String beanName) {

        return ctx.getBean(beanName);
    }
}

代码逻辑很简单,就是从容器中获取到指定名称的 Bean,而其中 ApplicationContext 接口其实就是 Spring IoC 容器。

当然 ApplicationContext 是一个接口,它有很多实现,而它也继承了 BeanFactory

BeanFactory or ApplicationContext

虽然 BeanFactory 是 IoC 容器的最基本的形式,但是 ApplicationContext 对其进行了很多扩展,并具有 BeanFactory 的所有功能,通常建议优先使用 ApplicationContext

3

总结

在通过Spring 官网 了解了 IoC 、DI 、容器和 Bean 的概念后,再结合平常的使用基本上可以有个大概流程。

当然,这只是一个很粗略的猜想,是否正确,还有待后面继续阅读源码,然后去验证。

- <End /> -

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员小航 微信公众号,前往查看

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

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

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