ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Spring

2021-09-21 21:34:43  阅读:142  来源: 互联网

标签:容器 BeanFactory Spring image Bean IOC


什么是Spring的依赖注入(DI)?IOC和DI的区别是什么

很多人把IOC和DI说成一个东西,笼统来说的话是没有问题的,但是本质上还是有所区别的,希望大家能够严谨一点,IOC和DI是从不同的

角度描述的同一件事,IOC是从容器的角度描述,而DI是从应用程序的角度来描述,也可以这样说,IOC是依赖倒置原则的设计思想,而

DI是具体的实现方式

在面向对象设计的软件系统中,底层的实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻

辑。

![image-20210921210458419](/Users/chentao/Library/Application Support/typora-user-images/image-20210921210458419.png)

有一个对象出了问题,就可能会影响到整个流程的正常运转。现在,伴随着工业级应用的规模越来越庞大,对象之间的依赖关系也越来越

复杂,经常会出现对象之间的多重依赖性关系,因此,架构师和设计师对于系统的分析和设计,将面临更大的挑战。对象之间耦合度过高

的系统,必然会出现牵一发而动全身的情形。

![image-20210921210530263](/Users/chentao/Library/Application Support/typora-user-images/image-20210921210530263.png)

大家看到了吧,由于引进了中间位置的“第三方”,也就是IOC容器,对象和对象之间没有了耦合关系, 它起到了一种

类似“粘合剂”的作用,把系统中的所有对象粘合在一起发挥作用,如果没有这个“粘合剂”,对象与对象之间会彼此

失去联系,这就是有人把IOC容器比喻成“粘合剂”的由来

紧耦合和松耦合有什么区别?

紧耦合:

紧密耦合是指类之间高度依赖。

松耦合:

松耦合是通过促进单一职责和关注点分离、依赖倒置的设计原则来实现的。

BeanFactory的作用

BeanFactory是Spring中非常核心的一个顶层接口

它是Bean的“工厂”、它的主要职责就是生产Bean

它实现了简单工厂的设计模式,通过调用getBean传入标识生产一个Bean;

它有非常多的实现类、每个工厂都有不同的职责(单一职责)功能,最强大的工厂是:DefaultListableBeanFactory

Spring底层就是使用的该实现工厂进行生产Bean的

BeanFactory它也是容器 Spring容器(管理着Bean的生命周期)

![image-20210921211150004](/Users/chentao/Library/Application Support/typora-user-images/image-20210921211150004.png)

BeanDefinition的作用

它主要负责存储Bean的定义信息:决定Bean的生产方式。

如:spring.xml

<bean class="com.ct.User" id="user" scope="singleton" lazy="false" abstract="false" autowire="none" ....>

<property name="username" value="chentao">` 

</bean>

后续BeanFactory根据这些信息就行生产Bean: 比如实例化 可以通过class进行反射进而得到实例对象 , 比如lazy 则不会在ioc加载时

创建Bean

BeanFactory 和 ApplicationContext有什么区别?

BeanFactory和ApplicationContext是Spring的两大核心接口,都可以当做Spring的容器。其中ApplicationContext是

BeanFactory的子接口。

依赖关系

BeanFactory:是Spring里面最顶层的接口,包含了各种Bean的定义,读取bean配置文档,管理bean的加载、实例

化,控制bean的生命周期,维护bean之间的依赖关系。BeanFactory 简单粗暴,可以理解为就是个 HashMap,Key 是

BeanName,Value 是 Bean 实例。通常只提供注册(put),获取(get)这两个功能。我们可以称之为 “低级容

器”

ApplicationContext 可以称之为 “高级容器”。因为他比 BeanFactory 多了更多的功能。他继承了多个接口。因此具

备了更多的功能。例如资源的获取,支持多种消息(例如 JSP tag 的支持),对 BeanFactory 多了工具级别的支持等

待。所以你看他的名字,已经不是 BeanFactory 之类的工厂了,而是 “应用上下文”, 代表着整个大容器的所有功

能。该接口定义了一个 refresh 方法,此方法是所有阅读 Spring 源码的人的最熟悉的方法,用于刷新整个容器,即重新

加载/刷新所有的 bean。

ApplicationContext接口作为BeanFactory的派生,除了提供BeanFactory所具有的功能外,还提供了更完整的框架功

能:

![image-20210921211627621](/Users/chentao/Library/Application Support/typora-user-images/image-20210921211627621.png)

标签:容器,BeanFactory,Spring,image,Bean,IOC
来源: https://www.cnblogs.com/cfs322/p/15317857.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有