Spring的学习(四):Spring容器
Spring的学习(四):Spring容器
yuhuan121 发表于4个月前
Spring的学习(四):Spring容器
  • 发表于 4个月前
  • 阅读 7
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

1、Spring容器

Spring有两个核心接口,分别为BeanFactory和ApplicationContext。后者是前者的子接口,都能代表Spring容器。Spring容器是生产Bean实例的工厂,且管理 容器中的Bean。对于Spring而言,一切对象都是Bean。

Java程序面向接口编程,无须关心Bean实例的实现类;但是Spring容器必须能够精确知道每个Bean实例的实现类,因此Spring配置文件必须精确配置Bean实例的实现类。 在 Spring IOC 容器读取 Bean 配置创建 Bean 实例之前, 必须对它进行实例化. 只有在容器实例化后, 才可以从 IOC 容器里获取 Bean 实例并使用.

2、BeanFactory

Spring容器最基本的接口就是BeanFactory,它负责配置、创建、管理Bean。有一个子接口ApplicationContext,所以也被称为spring上下文。

BeanFactory接口的基本方法:

  • Boolean containsBean(String name):判断Spring容器是否包含id为name的Bean实例;
  • <T> getBean(Class<T> requiredType):获取Spring容器中属于requiredType类型的唯一的Bean实例;
  • Object getBean(String name):返回Spring容器中id为name的Bean实例;
  • <T> T getBean(String name,Class requiredType):返回容器中id为name,并且类型为requiredType的Bean;
  • Class <?> getType(String name):返回容器中指定Bean实例的类型;

调用者只需使用getBean()方法即可获得指定Bean的引用,无须关心Bean的实例化过程。Bean实例 的创建、初始化及依赖关系的注入都是由spring完成的。

BeanFactory常用的实现类是DafaultListableBenFactory。 创建Spring容器实例时,必须提供Spring容器管理的Bean的详细配置信息。Spring的配置信息通常采用xml配置文件来设置,因此,创建BeanFactory实例时,应该提供XML配置文件作为参数。

XML配置文件通常使用Resource对象传入。Resource接口是Spring提供的资源访问接口,通过使用该接口,Spring能够以简单、透明的方式访问磁盘、类路径以及网络上的资源。

ApplicationContext作为BeanFactory的子接口,使用它作为Spring容器会更加方便。它的实现类有:FileSystemXmlApplicationContext、ClassPathXmlApplicationContext、AnnotationConfigApplicationContext。

对于独立的应用程序,实例化BeanFactory的代码如下:

//搜索类加载路径下的bean,xml文件创建
Resource isr = new ClassPathResource("bean.xml"); 
//创建默认的BeanFactory容器
DafaultListableBenFactory  beanFactory =  new  DafaultListableBenFactory();
//让默认的BeanFactory容器加载jsr对应的XML文件
new xmlBeanDefinitionReader(beanFactory).loadBeanDefinitions(isr);

或者如下代码:

//搜索文件系统当前路径下的bean,xml文件创建
Resource isr = new FileSystemResource("bean.xml"); 
//创建默认的BeanFactory容器
DafaultListableBenFactory  beanFactory =  new  DafaultListableBenFactory();
//让默认的BeanFactory容器加载jsr对应的XML文件
new xmlBeanDefinitionReader(beanFactory).loadBeanDefinitions(isr);

3、使用ApplicationContext

但是如果应用里面有多个属性配置文件,则应该采用BeanFactory的子接口ApplicationContext来创建BeanFactory的实例。ApplicationContext通常使用如下两个实现类:

  • FileSystemXmlApplicationContext:以基于文件系统的XML配置文件创建ApplicationContext实例。
  • ClassPathXmlApplicationContext:以类加载路径下的XML配置文件创建的ApplicationContext实例。

输入图片说明

ConfigurableApplicationContext 扩展于 ApplicationContext,新增加两个主要方法:refresh() 和 close(), 让 ApplicationContext 具有启动、刷新和关闭上下文的能力。

ApplicationContext 在初始化上下文时就实例化所有单例的 Bean。

4、区别

BeanFactory、ApplicationContext两者实例化容器中Bean的时机不同:前者等到程序需要Bean实例时才创建Bean;而后者在容器创建ApplicationContext实例时,会预初始化容器中所有的singleton Bean。

共有 人打赏支持
粉丝 0
博文 36
码字总数 38704
×
yuhuan121
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: