Spring两种核心容器那个更好?

1.BeanFactory

  • Spring框架的主要功能是通过其核心容器来实现的,而Spring框架提供了两种核心容器,分别为BeanFactoryAppliacationContext
  • BeanFactoryorg.springframework.beans.factory.BeanFactory定义接口,是基础类型的IoC容器,它提供了完整的IoC服务支持。
    ( 粗俗的说,BeanFactory就是一个Bean工厂里的包工头,它主要负责初始化各种Bean,并调用他们的生命周期方法。)
  • BeanFactory接口提供了几个实现类,其中最常用的是:org.springframework.beans.factory.xml.XmlBeanFactory,该类会根据XML配置文件中的定义来装配Bean。
  • 创建BeanFactory实例时,需要提供Spring所管理容器的详细配置信息,这些信息通常采用XML文件形式来管理,其加载配置信息的语法如下:
BeanFactory beanfactory=new XmlBeanFactory(new FileSystemResourceResource("F:/applicationContext.xml"));

这里只是举例,这种加载方式在实际开发中并不多用(灵活性太低)

2.ApplicationContext

  • ApplicationContext是BeanFactory的子接口,也被称为应用上下文,是另一种常用的Spring核心容器。
  • ApplicationContext由org.springframework.context.ApplicationContext接口定义,不仅包含了BeanFactory的所有子功能,还增加了对国际化、资源访问、事件传播等方面的支持。
    创建ApplicationContext接口实例,通常采用两种方法,具体如下:

(1)通过ClassPathXmlApplicationContext创建

  • ClassPathXmlApplicationContext会从类路径classPath中寻找指定的XML配置文件,找到并装载完成ApplicationContext的实例化工作

    其使用语法如下:

ApplicationContext applicationcontext=new ClassPathXmlApplicationContext(String configLocation);
  • configLocation参数用于指定Spring配置文件的名称和位置。如果其值为applicationContext.xml,则Spring会去类路径中查找名称为applicationContext.xml的配置文件

(2) 通过FileSystemXmlApplicationContext创建

  • FileSystemXmlApplicationContext会从指定的文件系统路径(绝对路径)中寻找指定的XML配置文件,找到并装载完成ApplicationContext的实例化工作

    其使用语法如下:

ApplicationContext applicationcontext= new FileSystemXmlApplicationContext(String configLocation);
  • 与ClassPathXmlApplicationContext有所不同的是,在读取Spring的配置文件时,FileSystemXmlApplicationContext不再从类路径读取配置文件。而是通过参数指定配置文件的位置,例如 D :/workspaces/applicationContex t. xml。如果在参数中写的不是绝对路径,那么方法调用的时候,会默认用绝对路径来找。这种采用绝对路径的方式,会导致程序的灵活性变差,所以这个方法一般不推荐使用。

  • 在使用Spring框架时,可以通过实例化其中任何一个类来创建ApplicationContext容器。通常在JAVA项目中,会采用通过ClassPathXmlApplicationContext类来实例化ApplicationContext容器的方式,而在Web项目中,ApplicationContext容器的实例化工作会交由Web服务器来完成。Web服务器实例化ApplicationContext时,通常会使用基于ContextLoaderListener实现的方式,此种方式只需要在web.xml中添加如下代码:

<!-- 指定Spring配置文件的位置,多个配置文件时,以逗号分隔-->
<context-param>
	<param-name>contextConfigLocation</param-name>
	<!--Spring将加载Spring目录下的applicationContext.xml文件-->
	<param-value>
		classpath:spring/applicationContext.xml
	</param-value>
</context-param>

<!--指定以ContextLoaderListener方式启动Spring容器-->
<listener>
	<listener-class>
		org.springframework.web.context.ContextLoaderListener
	</listener-class>
</listener>
  • 创建Spring容器后,就可以获取Spring容器中的Bean容器中的Bean。Spring获取Bean的实例通常采用以下两种方法:
//1.根据容器中Bean的id或者name来获取指定的Bean,获取之后需要进行强制类型转换。
Object getBean (String name)
//2.根据类的类型来获取Bean的实例,由于此方法为泛型方法,因此在获取Bean之后不需要进行强制类型转换
<T>T getBean(Class<T>requiredType)

总结

  • BeanFactory和ApplicationContext两种容器都是通过XML配置文件加载Bean的。
  • 二者的主要区别在于,如果Bean的某一个属性没有注入,使用BeanFactory加载后,在第一次调用getBean()方法时会抛出异常,而ApplicationContext则在初始化时自检,这样有利于检查所依赖属性是否注入。
  • 因此,在实际开发中,通常都优先选择使用ApplicationContext,而只有在系统资源较少时,才考虑使用BeanFactory。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SmallFatMan

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

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

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

打赏作者

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

抵扣说明:

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

余额充值