Spring的三大核心接口——BeanFactory、ApplicationContext、WebApplicationContext
之前也在用这三个接口,但是对于他们的概念还是处于朦胧状态,同时,也不知道他们之间是一个什么关系,趁着现在有点时间总结一下吧,也需要对你有所帮助。
一、BeanFactory
基本认识:
该接口提供了高级IOC配置机制,实现对不同类型JAVA对象的统一管理,从字面意思来理解意思是Bean工厂,即用来创建Bean的工厂,这里的Bean和我们之前理解的JavaBean有些不同,之前我们理解的JavaBean需要符合一定的规范,而这里的Bean范围更大,在这里凡是可以被Spring实例化管理的JAVA类都可以成为Bean,这样说来,这里的Bean首先包含我们刚才说的JavaBean,还包含着其他可以被实例化的Java类,这样说来BeanFactory就是一个工厂,创建可以被实例化和管理的Java对象,如果给其一个更合适的称呼,估计IOC容器算是比较合适吧。
体系结构:
BeanFactory:主要方法为getBean(String beanName),该方法根据Bean名称从容器返回对应的Bean。
ListableBeanFactory:该接口用来访问容器中Bean的基本信息,如获取Bean个数,某一类型Bean的配置名,查看容器是否包含某个Bean。
1、HierarchicalBeanFactory:父子级联IOC容器接口,子容器通过该接口方法访问父容器。
2、ConfigurableBeanFactroy:定义了设置类装载器,属性编辑器,,容器初始化后置处理器等方法。
3、AutowireCapableBeanFactory:用来定义容器中Bean自动装配的规则(按名称,按类型等)。
4、SingletonBeanRegistry:定义允许在运行期间向容器注册单实例Bean的方法。
5、BeanDefinitionRegistry:Spring配置文件中每个<bean>节点在Spring容器中都通过一个BeanDefinition对象表示,描述了Bean的配置信息,该接口提供了手工向容器注册BeanDefinition的方法。
二、ApplicationContext
基本认识:
ApplicationContext即应用上下文,它是建立在BeanFactory基础之上的,看下边的体系结构就可以发现。在ApplicationContext中提供了更多面向应用的功能,其很多功能可以通过配置方式实现。
体系结构:
ApplicationContext有两个主要的实现类:ClassPathXmlApplicationContext:默认从类路径加载配置文件,还有FileSystemXmlApplicationContext:默认从文件系统中装载配置文件,我用的多的还是ClassPathXmlApplicationContext。
ApplicationContext继承了HierarchicalBeanFactory和ListableBeanFactory(这两个接口在BeanFactory中说明过了),同时还通过继承以下接口实现功能扩展。
ApplicationEventPublisher:该接口让容器拥有发布应用上下文事件的功能,例如容器启动和容器关闭等。
MessageSource:提供国际化消息访问功能。
ResourcePatternResolver:实现通过前缀Ant风格文件路径配置文件的装载。
ConfigurableApplicationContext:继承了ApplicationContext并增加了refresh()和close()方法实现应用上下文的启动、刷新和关闭等能力。
三、WebApplicationContext
基本认识
WebApplicationContext是专门为web应用提供的,它允许从相对于web根目录路径中装载配置文件完成初始化;从WebApplicationContext中可以获得ServletContext的引用,同时为了方便web应用访问Spring应用上下文,WebApplicationContext也将作为一个属性放到ServletContext中,可以通过WebApplicationContextUtils的getWebApplicationContext(ServletContextsc)方法获取。
体系结构:
从图中可以发现WebApplicationContext扩展了ApplicationContext的功能,ApplicationContext扩展了BeanFactory的功能。
四、区别
1、初始化
BeanFactory和ApplicationContext初始化区别:BeanFactory在初始化容器时并没有实例化Bean,而是在第一次访问到目标Bean时才实例化该Bean;而ApplicationContext会在初始化上下文时实例化所有的单例的Bean。
WebApplicationContext和BeanFactory、ApplicationContext初始化的区别:WebApplicationContext的初始化需要servletContext实例,即初始化需要拥有web容器,我们需要在web.xml中配置自启动的servlet或web容器监听器(servletContextListener)。
2、Bean的作用域
在BeanFactory和ApplicationContext中的Bean的作用域有两种:singleton和prototype,在WebApplicationContext中的Bean的作用域有三种:request,session和globalSession。
singleton:在IOC容器中仅存在一个Bean实例,Bean以单例方式存在,外部引用都指向这个Bean。
prototype:每次调用Bean都返回一个新实例。
request:在同一个Http请求的Bean相同,每个Http请求创建一个新的Bean。
session:在Http请求对应同一个session时对应同一个Bean。
globalSession:一般的web应用中globalSession等价于session,只有在portlet web应用中才存在globalSession概念。
五、总结
对这几个接口之间的关系再次认识一下,其实其中还是有很多不明白的地方,不过比之前明白一些了,可能在开发中遇见问题多了,看的源码多了可能会好些,一点一点吸取吧。
Spring的三大核心接口——BeanFactory、ApplicationContext、WebApplicationContext的更多相关文章
- spring中基础核心接口总结
spring中基础核心接口总结理解这几个接口,及其实现类就可以快速了解spring,具体的用法参考其他spring资料 1.BeanFactory最基础最核心的接口重要的实现类有:XmlBeanFac ...
- Spring的三大核心思想:IOC(控制反转),DI(依赖注入),AOP(面向切面编程)
Spring核心思想,IoC与DI详解(如果还不明白,放弃java吧) 1.IoC是什么? IoC(Inversion of Control)控制反转,IoC是一种新的Java编程模式,目前很多 ...
- spring三大核心学习(一)---控制反转
记得当年大学时候,java的企业级框架还是ssh的天下(spring,struts和hibernate),但是现在,感觉spring已经完全把那两个框架甩在后边了.用spring的人越来越多,用str ...
- spring-framework核心接口ApplicationContext
核心接口(ApplicationContext) 继承关系 继承接口: org.springframework.beans.factory.ListableBeanFactory:用于访问应用程序组件 ...
- 核心容器的两个接口(ApplicationContext和BeanFactory)引发出的问题
BeanFactory 才是Spring 容器中的顶层接口.ApplicationContext 是它的子接口. ApplicationContext 它在构建核心容器时, 创建对象采取的策略是采用立 ...
- 【Spring源码分析系列】ApplicationContext 相关接口架构分析
[原创文章,转载请注明出处][本文地址]http://www.cnblogs.com/zffenger/p/5813470.html 在使用Spring的时候,我们经常需要先得到一个Applicati ...
- Spring beanFactory ApplicationContext
一.BeanFactoryBeanFactory 是 Spring 的“心脏”.它就是 Spring IoC 容器的真面目.Spring 使用 BeanFactory 来实例化.配置和管理 Bean. ...
- Spring(八):Spring配置Bean(一)BeanFactory&ApplicationContext概述、依赖注入的方式、注入属性值细节
在Spring的IOC容器里配置Bean 配置Bean形式:基于xml文件方式.基于注解的方式 在xml文件中通过bean节点配置bean: <?xml version="1.0&qu ...
- spring 的核心接口
spring有两个核心接口,BeanFactory 和ApplicationContext ,其中ApplicationContext 是BeanFactory的子接口.他们代表了Spring容器. ...
随机推荐
- beego 快速入门
原文链接:https://beego.me/quickstart 1.安装依赖 git clone http://github.com/astaxie/beego.git git clone http ...
- Kubernetes入门(一)——Kubernetes v1.18.5 安装部署
Kubernetes的安装有两种方式:一是使用各个厂商封装的Kubernetes发行版,优点是可以一键安装部署,操作简单,缺点也很明显,若安装过程中某一步骤出现问题,很难定位处理:二是使用官方提供的k ...
- SSM项目_Eclipse卡进程 一直loading加载spring-xx.xsd/无法加载SpringXSD文件
你遇到了套娃,请进https:////www.cnblogs.com/steamer/articles/12500645.html查看答案
- 分分钟玩转UI自动化测试
有没有那么一刻,看到自动模拟用户操作界面感觉好神奇. 关于什么叫 UI 自动化测试就不解释了,基本上是你刚才脑海里想到什么就是什么. 在分层自动化测试中包括:UI 测试.集成/接口测试.单元测试.大神 ...
- 23种设计模式(C++)
每一种都有对应理解的相关代码示例 → Git原码 一. GOF-23 模式分类 从目的来看 • 创建型(Creational)模式:将对象的部分创建工作延迟到子类或者其他对象,从而应对需求变化为对象创 ...
- 【Azure DevOps系列】Azure DevOps生成代码覆盖率
前言 在做单元测试时,代码覆盖率可以作为我们衡量代码质量的一个指标,本章我们将使用Azure DevOps帮助我们生成代码覆盖率的结果.Azure DevOps构建管道还是具有代码覆盖率选项的,在Vi ...
- Unimrcp通过Vendor传递随路数据
摘要 项目中需要在MRCPV2的识别消息中,传递一些随路数据.
- vue 在模板template中变量和字符串拼接
例子: :post-action="'/api/v1/reportPage/'+this.selectedPagerId+'/saveimg/'"
- Mybatis通用Join的实现(最终版)
你是否还在为mybatis的多表关联查询而写xml烦恼,是否还在为动态组装查询条件烦恼,是否还在为此没有合适的解决方案烦恼? mybatis-extension插件,解决开发过程中需要多表关联时需手写 ...
- Cubmap
视差 Cubmap https://chengkehan.github.io/LocalCubmap.html http://www.manew.com/thread-93923-1-1.html h ...