我们在学习spring的时候,第一个接触的应该就是Applicationcontext。 这个接口是spring源码的入口,里面有各种各样的方法。
这些天很感谢抖音刘老师的帮助,大家可以去某音搜索billgogoogooo找刘老师模拟面试,每个星期的周一,周二,周四,周五的七点到十点,刘老师会在直播间陪伴大家,大家记得来直播间点点小红心。然后记得去刘老师直播间购买八股文,这个八股和市面上的八股不一样,讲的很详细而且是一直更新的,都是刘老师的班级上面的同学去各个大厂面试然后总结出来的,价格不是特别离谱,多少钱我自己还不知道。 买完的同学记得告诉我,偷偷发我一份,让俺白嫖一下哈哈(真的过分)。
(图片来自网络,如有侵权请联系我)
最近到了金三银四的面试阶段,不知道大家复习的都怎么样了,还没复习的小伙伴要抓紧看看spring的源码了,什么spring的过滤器和拦截器的区别啊,spring aop的实现原理啊,spring的事务实现原理啊,spring的隔离级别和传播机制啊,spring怎么和mybatis集成的啊,当然我们今天只来讲讲ApplicationContext和BeanFactory的区别
然后我们再来看看这个接口的一个架构
可以看到Applicationcontext是Beanfactory的一个子接口
在我们面试中经常会考一个问题,ApplicationContext和Beanfactory的区别?
我们先来分析下ApplicationContext这个接口都有哪些子接口
首先ApplicationEventPublisher这个是Spring的监听器。
EnvironmentCapable这个接口是获取Spring的配置信息
ResourceLoader这个类是获取Spring的资源文件
MessageSource这个是Spring的国际化处理
当然ApplicationContext只是一个上层接口,里面还有各种实现类
然后我们来讲一讲spring的ListableBeanFactory和HierarchicalBeanFactory的区别
ListableBeanFactory和HierarchicalBeanFactory都是BeanFactory的两个子接口
我们先来看看ListableBeanFactory的方法和结构
然后再来看看ListableBeanFactory的架构
我们可以看到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和文件)、事件传播等功能。
然后这个问题大致上就处理完了,说的不够细致或者不准确的地方,可以给我留言。