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

前言

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

在阅读源码时,会参考官方文档,不少概念在官网均可以获得答案,有兴趣的小伙伴们能够继续阅读,当作复习,写的不足之处,但愿多多指导。java

IoC 和 DI

IoC 概念

IoC

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

以前是在对象内部 new 建立其余对象,而后使用。ide

而如今 Spring 中有一个容器能够在建立管理这些对象,而且将对象依赖的其余对象注入到这个对象中,这些对象的建立、销毁都由 Spring 进行管理。学习

相比之前来讲,再也不由本身控制其余对象的生命周期,这个过程就叫作控制反转。而负责统一管理这些类的容器就叫作 IoC 容器。spa

DI

IoC is also known as dependency injection (DI). code

是否是感受奇奇怪怪的,为何说:IoC 也称为 DIhtm

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

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

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

Spring 是经过 DI 实现 IoC 的。

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

总结

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

流程猜测

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

相关推荐

相关文章
相关标签/搜索