文档章节

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 IoC容器的核心原理

一、前言 前三篇已经从历史的角度和大家一起探讨了为什么会有Spring,Spring的两个核心概念:IoC和AOP的雏形,Spring的历史变迁和如今的生态帝国。本节的主要目的就是通过一个切入点带大家一...

Java小铺
08/27
0
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 Boot?

一、Web应用开发背景 使用Java做Web应用开发已经有近20年的历史了,从最初的Servlet1.0一步步演化到现在如此多的框架、库以及整个生态系统。经过这么长时间的发展,Java作为一个成熟的语言,...

Ala6
10/10
0
0
spring梳理(二) 基于注解的方式注册bean

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

wyn_lin
05/25
0
0
Spring实战 (一) 一切从Bean开始

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

kenshiro
2013/09/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

linux使用ntfs-3g操作ntfs格式硬盘

Linux内核目前只支持对微软NTFS文件系统的读取。 NTFS-3G 是微软 NTFS 文件系统的一个开源实现,同时支持读和写。NTFS-3G 开发者使用 FUSE 文件系统来辅助开发,同时对可移植性有益。 安装 ...

linuxprobe16
今天
1
0
kubeadm部署kubernetes集群

一、环境要求 这里使用RHEL7.5 master、etcd:192.168.10.101,主机名:master node1:192.168.10.103,主机名:node1 node2:192.168.10.104,主机名:node2 所有机子能基于主机名通信,编辑...

人在艹木中
今天
7
0
Shell特殊符号总结以及cut,sort,wc,uniq,tee,tr,split命令

特殊符号总结一 * 任意个任意字符 ? 任意一个字符 # 注释字符 \ 脱义字符 | 管道符 # #号后的备注被忽略[root@centos01 ~]# ls a.txt # 备注 a.txt[root@centos01 ~]# a=1[root@centos01...

野雪球
今天
3
0
OSChina 周二乱弹 —— 程序员圣衣

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文:分享Skeeter Davis的单曲《The End of the World》 《The End of the World》- Skeeter Davis 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
18
0
[ python import module ] 导入模块

import moudle_name ----> import module_name.py ---> import module_name.py文件路径 -----> sys.path (这里进行查找文件) # from app.web import Personimport app.web.Person as Pe......

_______-
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部