zoukankan      html  css  js  c++  java
  • 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概念。

    五、总结
           对这几个接口之间的关系再次认识一下,其实其中还是有很多不明白的地方,不过比之前明白一些了,可能在开发中遇见问题多了,看的源码多了可能会好些,一点一点吸取吧。

  • 相关阅读:
    C#深入浅出 修饰符(二)
    HDU 5785 Interesting
    HDU 5783 Divide the Sequence
    HDU 5781 ATM Mechine
    UVA 714 Copying Books
    uva 1471 Defense Lines
    UVA 11134 Fabled Rooks
    UVA 11572 Unique Snowflakes
    UVA 11093 Just Finish it up
    UVA 10954 Add All
  • 原文地址:https://www.cnblogs.com/vieta/p/11025488.html
Copyright © 2011-2022 走看看