Spring
发布日期:2021-06-28 23:30:13
浏览次数:3
分类:技术文章
本文共 2555 字,大约阅读时间需要 8 分钟。
- IoC容器和AOP是Spring的核心,是Spring系统中其他组件模块和应用开发的基础。降低应用的负载和框架的侵入性
- EJB模型为Java EE开发引入了过度的复杂性,
POJO
它让Java洗净铅华,恢复其自然的风采。 - 因为依赖注入的特性,这些复杂的依赖关系的管理被反转了,它们的管理交给了
容器
- 通过使用IoC容器,对象依赖关系的管理转到IoC容器中来了,对象之间的相互依赖关系由IoC容器进行管理,并由容器完成对象的注入。这样就在很大程度上简化了应用的开发,把应用从复杂的对象依赖关系管理中解放出来。
- Spring通过定义
BeanDefinition
来管理基于Spring的应用中的各种对象以及它们之间的相互依赖关系。BeanDefinition抽象了我们对Bean的定义,是让容器起作用的主要数据类型,BeanFactory定义了IoC容器的基本功能规范
比如DefaultListableBeanFactory、XmlBeanFactory、ApplicationContext等都可以看成是容器的附加了某种功能的具体实现,也就是容器体系中的具体容器产品 对IoC容器来说,BeanDefinition就是对依赖反转模式中管理的对象依赖关系的数据抽象,也是容器实现依赖反转功能的核心数据结构,依赖反转功能都是围绕对这个BeanDefinition的处理上完成的。这些BeanDefinition就像是容器里装的水,有了这些基本数据,容器才能够发挥作用。 FactoryBean
和BeanFactory
这两个在Spring中使用频率很高的类,一个是Factory,也就是IoC容器或对象工厂;一个是Bean。在Spring中,所有Bean都是由BeanFactory(也就是IoC容器)来进行管理的
。但对FactoryBean而言,这个Bean不是简单的Bean,而是一个能产生或者修饰对象生成的工厂Bean,它的实现与设计模式中的工厂模式和修饰器模式类似。BeanFactory接口设计了getBean方法,这个方法是使用IoC容器API的主要方法,通过这个方法,可以取得IoC容器中管理的Bean,- BeanFactory (IoC容器) AutowireCapableBeanFactory→AbstractAutowireCapableBeanFactory→DefaultListableBeanFactory→XmlBeanFactory IoC容器的实现系列, 最底层实现XmlBeanFactory ,这个IoC容器可以读取以XML形式定义的BeanDefinition。理解这一点有助于理解ApplicationContext与基本的BeanFactory之间的区别和联系。我们可以认为直接的BeanFactory实现是IoC容器的基本形式,而各种ApplicationContext的实现是IoC容器的高级表现形式。
DefaultListableBeanFactory
- ApplicationContext在BeanFactory的基础上添加的附加功能,这些功能为ApplicationContext提供了以下BeanFactory不具备的新特性。 ApplicationContext扩展了MessageSource接口,这些信息源的扩展功能可以支持
支持不同的信息源
。我们看到ApplicationContext扩展了MessageSource
接口,这些信息源的扩展功能可以支持国际化的实现,为开发多语言版本的应用提供服务。访问资源
。体现在对ResourceLoader和Resource
的支持上,这样我们可以从不同地方得到Bean定义资源。这种抽象使用户程序可以灵活地定义Bean定义信息,尤其是从不同的IO途径得到Bean定义信息。这在接口关系上看不出来,一般来说,具体Applic-ationContext都是继承了DefaultResourceLoader的子类。因为DefaultResourc-eLoader是AbstractApplicationContext的基类,关于Resource在IoC容器中的使用,支持应用事件
。继承了接口ApplicationEventPublisher
,这样在上下文中引入了事件机制。这些事件和Bean的生命周期的结合为Bean的管理提供了便利。 因为具备了这些丰富的附加功能,使得ApplicationContext与简单的BeanFactory相比,对它的使用是一种面向框架的使用风格
,所以一般建议在开发应用时使用ApplicationContext作为IoC容器的基本形式。
- IoC容器的初始化包括BeanDefinition的Resouce定位、载入和注册这三个基本的过程。Spring在实现中是把这三个过程分开并
使用不同的模块来完成的
,这样可以让用户更加灵活地对这三个过程进行剪裁和扩展,定义出最适合自己的IoC容器的初始化过程。
- BeanDefinition的资源定位由
ResourceLoader
通过统一的Resource接口来完成 - BeanDefinition的载入,BeanDefinition实际上就是POJO对象在IoC容器中的抽象
- 向IoC容器注册这些BeanDefinition的过程,过程是通过调用
BeanDefinitionRegistry
接口的实现来完成的,这个注册过程把载入过程中解析得到的BeanDefinition向IoC容器进行注册。可以看到,在IoC容器内部,是通过使用一个HashMap来持有这些BeanDefinition数据的。
-
IoC容器和上下文的初始化一般不包含Bean依赖注入的实现,赖注入发生在应用第一次向容器通过getBean索取Bean时
-
IoC容器的依赖注入
- 依赖注入的过程是用户
第一次向IoC容器索要Bean
时触发的(也有例外在BeanDefinition信息中通过控制lazy-init属性来让容器完成对Bean的预实例化。这个预实例化实际上也是一个完成依赖注入的过程) - 依赖注入关系特别密切的方法有createBeanInstance和populateBean
转载地址:https://blog.csdn.net/ynchyong/article/details/112359503 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2024年04月09日 18时15分09秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
CTFshow 反序列化
2019-04-29
CTFSHOW SSRF
2019-04-29
[BJDCTF2020]Mark loves cat
2019-04-29
[网鼎杯 2020 朱雀组]phpweb
2019-04-29
[BJDCTF2020]Cookie is so stable
2019-04-29
[SUCTF 2019]Pythonginx
2019-04-29
[极客大挑战 2019]RCE ME
2019-04-29
HackTheBox-------ScriptKiddie
2019-04-29
Shell学习
2019-04-29
[Zer0pts2020]Can you guess it?
2019-04-29
Jenkins资料整理
2019-04-29
ArrayList源码常用方法注意点
2019-04-29
MySQL资料整理
2019-04-29
Redis常用文章整理
2019-04-29
RocketMQ资料整理
2019-04-29
慢sql统计
2019-04-29
基于webRTC的1V1在线视频聊天(网页版DEMO)
2019-04-29
Disconf数据安全保护设计方案
2019-04-29
HttpClient获取302重定向的新网址方法
2019-04-29
Java 函数优雅之道【大厂规范】
2019-04-29