Spring的三大核心接口——BeanFactory、ApplicationContext、WebApplicationContext

https://blog.csdn.net/rcj183419/article/details/54708505

                    版权声明:本文为博主原创文章,未经博主允许不得转载。                        https://blog.csdn.net/u013030441/article/details/54708505                    </div>
                                                <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-cd6c485e8b.css">
                                    <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-cd6c485e8b.css">
            <div class="htmledit_views" id="content_views">

       之前也在用这三个接口,但是对于他们的概念还是处于朦胧状态,同时,也不知道他们之间是一个什么关系,趁着现在有点时间总结一下吧,也需要对你有所帮助。

一、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概念。

五、总结

       对这几个接口之间的关系再次认识一下,其实其中还是有很多不明白的地方,不过比之前明白一些了,可能在开发中遇见问题多了,看的源码多了可能会好些,一点一点吸取吧。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hello_world!

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值