文档章节

Spring的学习(四):Spring容器

yuhuan121
 yuhuan121
发布于 2017/08/24 19:44
字数 889
阅读 7
收藏 0

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。

© 著作权归作者所有

共有 人打赏支持
yuhuan121
粉丝 0
博文 36
码字总数 38704
作品 0
佛山
程序员
Spring 源码解读 推荐流程

Spring源代码解析(一):IOC容器:http://www.javaeye.com/topic/86339 Spring源代码解析(二):IoC容器在Web容器中的启动:http://www.javaeye.com/topic/86594 Spring源代码解析(三):Sprin...

2k10
2015/04/02
0
0
spring梳理(二) 基于注解的方式注册bean

我们知道,如果想要将bean交由spring容器管理,就需要首先将bean注册在spring容器中,而bean可以通过xml或者注解的方式进行注册,基于xml的配置一般是通过、等xml标签进行配置,然后由sprin...

wyn_lin
05/25
0
0
《Spring5学习》 01 装配Bean之自动化装配

Spring的自动化装配就便利性方面远远优于其他装配方法,这也是业界目前主要采用的Bean装配机制。Spring基于组建扫描和自动装配实现自动化装配,能将用户的显示配置降到最低。以下通过一段代码...

老韭菜
08/05
0
0
day33_Spring学习笔记_01

零、蓦然回首 Struts2:web层,比较简单(难点:ValueStack值栈、拦截器) Hibernate:dao层,知识点杂(学了不用,默认设置够用了) Spring:service层,重要,(讲多少用多少) Spring课程...

黑泽明军
07/22
0
0
Spring实战 (一) 一切从Bean开始

Spring可以做很多事情,但是归根究底.Spring的核心仅仅是依赖注入(DI)/控制反转(IoC)和面向切面编程(AOP)而已.Spring的一切都是基于这2点 Spring的一切都是从Bean开始的.什么是Bean?凡是被Spr...

kenshiro
2013/09/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

八大包装类型的equals方法

先看其中一个源码 结论:八大包装类型的equals方法都是先判断类型是否相同,不相同则是false,相同则判断值是否相等 注意:包装类型不能直接用==来等值比较,否则编译报错,但是数值的基本类型...

xuklc
36分钟前
1
0
NoSQL , Memcached介绍

什么是NoSQL 非关系型数据库就是NoSQL,关系型数据库代表MySQL 对于关系型数据库来说,是需要把数据存储到库、表、行、字段里,查询的时候根据条件一行一行地去匹配,当量非常大的时候就很耗...

TaoXu
昨天
0
0
890. Find and Replace Pattern - LeetCode

Question 890. Find and Replace Pattern Solution 题目大意:从字符串数组中找到类型匹配的如xyy,xxx 思路: 举例:words = ["abc","deq","mee","aqq","dkd","ccc"], pattern = "abb"abc ......

yysue
昨天
0
0
Linux | Redis

写在前面的话 常言道,不作笔记不读书。在下是深有体会啊,所以,跟我一起做下本节的笔记吧,或许多年以后,你一定会感谢今天的你。 安装 在官网的下载页 Redis Download 直接写了在Linux的安...

冯文议
昨天
1
0
NoSQL-memcached

NoSQL介绍 NoSQL叫非关系型数据库。而关系型数据库代表有MySQL。对于关系型数据库来说,是需要把数据存储到库、表、行、字段里,查询的时候根据条件一行一行地去匹配,当量非常大的时候就很...

ln97
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部