BeanFactory 和ApplicationContext
2016-06-22 18:12
218 查看
Bean 工厂(com.springframework.beans.factory.BeanFactory)是Spring 框架最核心的接口,它提供了高级IoC 的配置机制。应用上下文(com.springframework.context.ApplicationContext)建立在BeanFactory 基础之上。几乎所有的应用场合我们都直接使用ApplicationContext 而非底层的BeanFactory。
BeanFactory实际上是实例化,配置和管理众多bean的容器。
这些bean通常会彼此合作,因而它们之间会产生依赖。 BeanFactory使用的配置数据可以反映这些依赖关系中
BeanFactory 接口位于类结构树的顶端, 它最主要的方法就是getBean(StringbeanName),该方法从容器中返回特定名称的Bean,BeanFactory 的功能通过其他的接口得到不断扩展。
ApplicationContext由BeanFactory 派生而来,提供了更多面向实际应用的功能。在BeanFactory 中,很多功能需要以编程的方式实现,而在ApplicationContext 中则可以通过配置的方式实现。ApplicationContext是BeanFactory的子类, 所以大多数的用户更喜欢使用ApplicationContext的XML形式)。
ApplicationContext 的主要实现类是ClassPathXmlApplicationContext 和FileSystemXmlApplicationContext,前者默认从类路径加载配置文件,后者默认从文件系统中装载配置文件。ApplicationContext,它以一种更加面向框架的方式增强了BeanFactory的功能。多数用户可以以一种完全的声明式方式来使用ApplicationContext,甚至不用去手工创建它,但是却去依赖像ContextLoader的支持类,在J2EE的Web应用的启动进程中用它启动ApplicationContext。当然,这种情况下还可以以编程的方式创建一个ApplicationContext。
在ApplicationContext的诸多实现中,有三个经常用到:
1。ClassPathXmlApplicationContext:从类路径中的XML文件载入上下文定义信息,把上下文定义文件当作类路径资源。
2。FileSystemXmlApplicationContext:从文件系统中的XML文件载入上下文定义信息。
3。XmlWebApplicationContext:从Web系统中的XMl文件载入上下文信息。
例如:
//通过ApplicationContext来获取Spring的配置文件
ApplicationContext actx=new FileSystemXmlApplicationContext("applicationContext.xml.xml");
a98f
//通过Bean的id来获取bean
Hello hello=(Hello)actx.getBean("HelloWorld");
无论是那种实现,都是用getBean()方法,这不要奇怪,因为ApplicationContext接口扩展自BeanFactory接口。
应用上下文与Bean工厂的另一个重要的区别就是关于单实例Bean是如何载入的。Bean工厂延迟载入所有的Bean,直到getbean()方法被调用是Bean才被创建。应用上下文则会在上下文启动后预载入所有的单实例Bean。通过预载入单实例bean ,确保当你需要的时候,你就不用等待,因为它们已经创建好了。
总结
1.如果使用ApplicationContext,则配置的bean如果是singleton不管你用还是不用,都被实例化。好处是可以预先加载,坏处是浪费内存。
2.BeanFactory,当使用BeanFactory实例化对象时,配置的bean不会马上被实例化。当你使用该bean时才会被实例化(getBean)。好处是节约内存,缺点是速度比较慢。多用于移动设备的开发上。
3.一般没有特殊要求,应当使用ApplicationContext完成。
BeanFactory实际上是实例化,配置和管理众多bean的容器。
这些bean通常会彼此合作,因而它们之间会产生依赖。 BeanFactory使用的配置数据可以反映这些依赖关系中
BeanFactory 接口位于类结构树的顶端, 它最主要的方法就是getBean(StringbeanName),该方法从容器中返回特定名称的Bean,BeanFactory 的功能通过其他的接口得到不断扩展。
ApplicationContext由BeanFactory 派生而来,提供了更多面向实际应用的功能。在BeanFactory 中,很多功能需要以编程的方式实现,而在ApplicationContext 中则可以通过配置的方式实现。ApplicationContext是BeanFactory的子类, 所以大多数的用户更喜欢使用ApplicationContext的XML形式)。
ApplicationContext 的主要实现类是ClassPathXmlApplicationContext 和FileSystemXmlApplicationContext,前者默认从类路径加载配置文件,后者默认从文件系统中装载配置文件。ApplicationContext,它以一种更加面向框架的方式增强了BeanFactory的功能。多数用户可以以一种完全的声明式方式来使用ApplicationContext,甚至不用去手工创建它,但是却去依赖像ContextLoader的支持类,在J2EE的Web应用的启动进程中用它启动ApplicationContext。当然,这种情况下还可以以编程的方式创建一个ApplicationContext。
在ApplicationContext的诸多实现中,有三个经常用到:
1。ClassPathXmlApplicationContext:从类路径中的XML文件载入上下文定义信息,把上下文定义文件当作类路径资源。
2。FileSystemXmlApplicationContext:从文件系统中的XML文件载入上下文定义信息。
3。XmlWebApplicationContext:从Web系统中的XMl文件载入上下文信息。
例如:
//通过ApplicationContext来获取Spring的配置文件
ApplicationContext actx=new FileSystemXmlApplicationContext("applicationContext.xml.xml");
a98f
//通过Bean的id来获取bean
Hello hello=(Hello)actx.getBean("HelloWorld");
无论是那种实现,都是用getBean()方法,这不要奇怪,因为ApplicationContext接口扩展自BeanFactory接口。
应用上下文与Bean工厂的另一个重要的区别就是关于单实例Bean是如何载入的。Bean工厂延迟载入所有的Bean,直到getbean()方法被调用是Bean才被创建。应用上下文则会在上下文启动后预载入所有的单实例Bean。通过预载入单实例bean ,确保当你需要的时候,你就不用等待,因为它们已经创建好了。
总结
1.如果使用ApplicationContext,则配置的bean如果是singleton不管你用还是不用,都被实例化。好处是可以预先加载,坏处是浪费内存。
2.BeanFactory,当使用BeanFactory实例化对象时,配置的bean不会马上被实例化。当你使用该bean时才会被实例化(getBean)。好处是节约内存,缺点是速度比较慢。多用于移动设备的开发上。
3.一般没有特殊要求,应当使用ApplicationContext完成。
相关文章推荐
- iOS-程序启动
- cocos2dx-触摸分发分析
- android assets目录搜索文件,返回该文件相对路径的方法
- Android Studio clean 时产生 Error:Execution failed for task ':app:mockableAndroidJar' > java.lang.NullP
- Android之SlingMenu,简单的侧滑SlidingMenu
- Android cannot resolve constructor intent原因与解决办法
- Unity3D中C#调用iOS的静态库(*.a)
- Ionic实战一:Ionic仿照微信项目
- Ubuntu 测试android真机 lsusb命令出现:???????????? no permissions(解决办法)
- Android 性能分析工具dumpsys的使用
- iOS9URLScheme适配(白名单配置)
- Android Paint的使用详解
- Android 进程常驻(5)----开机广播的简单守护以及总结
- 理解与配置android studio中的gradle
- spring中的Log4jConfigListener作用和webapp.root的设置
- Android 进程常驻(4)----native保活5.0以上方案推演过程以及代码详述
- 使用Xcode7的Instruments检测解决iOS内存泄露
- Android 进程常驻(3)----native保活5.0以下方案推演过程以及代码详述
- Android 进程常驻(2)----细数利用android系统机制的保活手段
- Android反编译教程