【Spring】BeanFactory和ApplicationContext

Spring通过一个配置文件描述Bean和Bean之间的依赖关系,利用Java反射功能实例化Bean,并建立Bean之间的依赖关系。

Spring的IOC容器在完成这些底层工作的基础上,还提供了Bean实例缓存、生命周期管理、Bean实例代理、事件发布、资源装载等高级服务。

BeanFactory是Spring框架最核心的接口,它提供了高级IOC的配置机制。

ApplicationContext建立在BeanFactory的基础上,提供了更多面向应用的功能, 它提供了国际化支持和框架事件体系。

我们一般称BeanFactory为IoC容器,而称ApplicationContext为应用上下文,但有时候为了行文方便,我们也将ApplicationContext称为Spring容器。

对于BeanFactory 和 ApplicationContext的用途:

  • BeanFactory是Spring框架的基础设施,面向Spring本身;
  • ApplicationContext面向使用Spring框架的开发者,几乎所有的应用场合都可以直接使用Application而非底层的BeanFactory。

BeanFactory

BeanFactory是一个类的通用工厂,可以创建并管理各种类的对象。

这些被创建和管理的对象,并无特别之处,仅仅是一个POJO,Spring称这些被创建和管理的Java对象为bean.

所有可以被Spring容器实例化并管理的Java类都可以成为Bean。

BeanFactory的主要方法是 getBean(String beanName). 该方法从容器中返回特定名称的Bean.

通过BeanFactory启动IOC,初始化动作发生在第一调用时。

对于单实例singleton的bean来将,BeanFactory会缓存bean实例, 所以第二次使用getBean()时,将直接从IOC容器的缓存中获取Bean实例。


ApplicationContext

Application由BeanFactory派生而来,提供了更多面向实际的功能。

在BeanFactory中,很多功能都需要以编程的形式实现,但是在Application中则可以通过配置的方式实现

ApplicationContext的初始化和BeanFactory初始化有一个重大区别:
BeanFactory在初始化容器时,并没有实例化Bean,直到第一次访问某个Bean时才实例化目标Bean。
ApplicationContext会在初始化应用上下文时就实例化所有单实例的Bean。
因此,ApplicationContext的初始化时间会比BeanFactory的时间稍微长一些,不过稍后的调用则没有“第一次惩罚”的问题。

ApplicationContext两个主要实现类:

  • ClassPathXmlApplicationContext:如果配置文件放在在类路径下,则优先考虑使用ClassPathXmlApplication实现类;
  • FileSystemXmlApplicationContext:如果配置文件放在文件系统路径下,则优先考虑使用FileSystemXmlApplication实现类。

基于类注解的配置方式

Spring支持基于类注解的配置方式,主要来源于Spring的子项目JavaConfig。 目前JavaConfig已经成为Spring核心框架的一部分。

一个标注了@Configuration注解的POJO即可提供Spring所需要的配置信息。

Spring为基于注解类的配置提供了专门的ApplicationContext实现类:AnnotationConfigApplication。

AnnnotationConfigApplication将加载Beans.class中的Bean定义并调用Beans.class中的方法实例化Bean,启动并装载Bean。

转:https://blog.csdn.net/yangshangwei/article/details/74937778

猜你喜欢

转载自blog.csdn.net/weixin_38121168/article/details/89557131