spring applicaitoncontext和beanfactory的区别

84 阅读3分钟

我们在学习spring的时候,第一个接触的应该就是Applicationcontext。 这个接口是spring源码的入口,里面有各种各样的方法。

这些天很感谢抖音刘老师的帮助,大家可以去某音搜索billgogoogooo找刘老师模拟面试,每个星期的周一,周二,周四,周五的七点到十点,刘老师会在直播间陪伴大家,大家记得来直播间点点小红心。然后记得去刘老师直播间购买八股文,这个八股和市面上的八股不一样,讲的很详细而且是一直更新的,都是刘老师的班级上面的同学去各个大厂面试然后总结出来的,价格不是特别离谱,多少钱我自己还不知道。 买完的同学记得告诉我,偷偷发我一份,让俺白嫖一下哈哈(真的过分)。

image.png

(图片来自网络,如有侵权请联系我)

最近到了金三银四的面试阶段,不知道大家复习的都怎么样了,还没复习的小伙伴要抓紧看看spring的源码了,什么spring的过滤器和拦截器的区别啊,spring aop的实现原理啊,spring的事务实现原理啊,spring的隔离级别和传播机制啊,spring怎么和mybatis集成的啊,当然我们今天只来讲讲ApplicationContext和BeanFactory的区别

image.png

然后我们再来看看这个接口的一个架构

image.png

可以看到ApplicationcontextBeanfactory的一个子接口

在我们面试中经常会考一个问题,ApplicationContext和Beanfactory的区别?

我们先来分析下ApplicationContext这个接口都有哪些子接口

首先ApplicationEventPublisher这个是Spring的监听器。

EnvironmentCapable这个接口是获取Spring的配置信息

ResourceLoader这个类是获取Spring的资源文件

MessageSource这个是Spring的国际化处理

当然ApplicationContext只是一个上层接口,里面还有各种实现类

image.png

然后我们来讲一讲spring的ListableBeanFactoryHierarchicalBeanFactory的区别

ListableBeanFactoryHierarchicalBeanFactory都是BeanFactory的两个子接口

我们先来看看ListableBeanFactory的方法和结构

image.png

然后再来看看ListableBeanFactory的架构

image.png

我们可以看到ListableBeanFactory是继承BeanFactory接口的

然后我们来详细讲讲ListableBeanFacotry的一些接口

containsBeanDefinition这个方法是判断是否包含某个BeanDefinition

还有这个方法getBeanDefinitionCount是获取BeanDefinition的数量

还有这个方法getBeanDefinitionNames是获取BeanDefinition的名称

getBeanProvider这个方法是延迟查找某一个Bean

getBeanNamesForType还有这个是根据类型查找Bean的名称集合

getBeansOfType这个是根据类型获取Bean的键值对

getBeanNamesForAnnotation这个是根据注解获取Bean名称

getBeansWithAnnotation这个是根据注解获取Bean的键值对

findAnnotationOnBean还有这个是根据Bean的名称和类型来查找Bean

然后我们再来看看HierarchicalBeanFactory这个接口

getParentBeanFactory这个是获取父容器的BeanFactory

containsLocalBean这个是在当前BeanFactory中查找是否包含某个Bean

最后我们再来看看他们使用场景的区别

ApplicationContext是Spring框架中更高级的接口,提供了更多的功能和服务。它继承自BeanFactory接口,并在此基础上增加了对国际化支持、资源访问(如URL和文件)、事件传播等功能。

然后这个问题大致上就处理完了,说的不够细致或者不准确的地方,可以给我留言。