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

17次阅读

共计 1327 个字符,预计需要花费 4 分钟才能阅读完成。

前言

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

在浏览源码时,会参考官网文档,很多概念在官网都能够失去答案,有趣味的小伙伴们能够持续浏览,当做温习,写的不足之处,心愿多多领导。

IoC 和 DI

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 的。

Container 和 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 是 IoC 容器的最根本的模式,然而 ApplicationContext 对其进行了很多扩大,并具备 BeanFactory 的所有性能,通常倡议优先应用 ApplicationContext

总结

在通过 Spring 官网 理解了 IoC、DI、容器和 Bean 的概念后,再联合平时的应用基本上能够有个大略流程。

当然,这只是一个很粗略的猜测,是否正确,还有待前面持续浏览源码,而后去验证。

相干举荐

  • Spring 源码学习 01:源码浏览环境的搭建
  • Spring 自调用事务生效,你是怎么解决的?
  • APP 莫名解体,开始认为是 Header 中 name 大小写的锅,最初发现原来是容器的错

正文完
 0