(1)ApplicationContext接口容器

ApplicationContext用于加载Spring的配置文件,在程序中充当“容器”的角色。其实现类有两个。通过Ctrl +T查看:

A、配置文件在类路径下
若Spring配置文件存放在项目的类路径下,则使用ClassPathXmlApplicationContext实现类进行加载。

B、配置文件在本地目录中
若Spring配置文件存放在本地磁盘目录中,则使用FileSystemXmlApplicationContext实现类进行加载。

C、配置文件在项目根路径下
若Spring配置文件存放在项目的根路径下,同样使用FileSystemXmlApplicationContext实现类进行加载。
下面是存放在项目根路径下的情况,该配置文件与src目录同级,而非在src中。

    @Test
public void test02() {
// ClassPathXmlApplicationContext()创建容器, applicationContext.xml需要放在src/resource目录下
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
HelloWorld hw= (HelloWorld) applicationContext.getBean("helloWorld");
System.out.println("====================================");
System.out.println(hw.getMessage()); } @Test
public void test03() {
// 使用FileSystemXmlApplicationContext()创建容器,applicationContext.xml需要放在根目录src下
ApplicationContext applicationContext=new FileSystemXmlApplicationContext("applicationContext.xml");
HelloWorld hw= (HelloWorld) applicationContext.getBean("helloWorld");
System.out.println("====================================");
System.out.println(hw.getMessage());
}

(2)BeanFactory接口容器

BeanFactory接口对象也可作为Spring容器出现。BeanFactory接口是ApplicationContext接口的父类。

若要创建BeanFactory容器,需要使用其实现类XmlBeanFactory(Ctrl+T查看继承关系)。该类可以加载Spring配置文件。

    @Test
public void test04(){
// 这个容器的对象不是在容器初始化时创建的,而是在使用是创建的
BeanFactory bf=new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
HelloWorld hw= (HelloWorld) bf.getBean("helloWorld");
System.out.println("===================================");
System.out.println(hw.getMessage());
}

而Spring配置文件以资源Resouce的形式出现在XmlBeanFactory类的构造器参数中。Resouce是一个接口,其具有两个实现类:
. ClassPathResource:指定类路径下的资源文件
. FileSystemResource:指定项目根路径或本地磁盘路径下的资源文件。

在创建了BeanFactory容器后,便可使用其重载的getBean()方法,从容器中获取指定的Bean对象。

(3)两个接口容器的区别

虽然这两个接口容器所要加载的Spring配置文件是同一个文件,但在代码中的这两个容器对象却不是同一个对象,即不是同一个容器:它们对于容器内对象的装配(创建)时机是不同的。
装配时机测试时需要注意,首先要在容器中对象StudentServiceImpl类的无参构造器中添加一个输出语句,以显示其是否执行。

A、ApplicationContext容器中对象的装配时机
ApplicationContext容器,会在容器对象初始化时,将其中的所有对象一次性全部装配好。以后代码中若要使用到这些对象,只需从内存中直接获取即可。执行效率较高。但占用内存。

B、BeanFactory容器中对象的装配时机
BeanFactory容器,对容器中对象的装配与加载采用延迟加载策略,即在第一次调用getBean()时,才真正装配该对象。

Spring之ApplicationContext的更多相关文章

  1. Spring中ApplicationContext对事件的支持

    Spring中ApplicationContext对事件的支持   ApplicationContext具有发布事件的能力.这是因为该接口继承了ApplicationEventPublisher接口. ...

  2. Spring获取ApplicationContext方式,和读取配置文件获取bean的几种方式

    转自:http://chinazhaokeke.blog.163.com/blog/static/109409055201092811354236  Spring获取ApplicationContex ...

  3. Spring容器-ApplicationContext的单例设计

    Spring容器-ApplicationContext的单例设计   每次通过new创建一个ApplicationContext容器,都会执行refresh方法,看源代码了解到这个refresh方法会 ...

  4. Spring的applicationContext.xml文件

    以下是详解Spring的applicationContext.xml文件代码:<!-- 头文件,主要注意一下编码 --><?xml version="1.0" e ...

  5. web.xml中配置Spring中applicationContext.xml的方式

    2011-11-08 16:29 web.xml中配置Spring中applicationContext.xml的方式 使用web.xml方式加载Spring时,获取Spring applicatio ...

  6. 怎么获取Spring的ApplicationContext

    在 WEB 开发中,可能会非常少须要显示的获得 ApplicationContext 来得到由 Spring 进行管理的某些 Bean, 今天我就遇到了,在这里和大家分享一下, WEB 开发中,怎么获 ...

  7. Spring中ApplicationContext加载机制

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp33 加载器目前有两种选择:ContextLoaderListener和Co ...

  8. Spring初始化ApplicationContext为null

    1. ApplicationContextAware初始化 通过它Spring容器会自动把上下文环境对象调用ApplicationContextAware接口中的setApplicationConte ...

  9. 获取spring的ApplicationContext几种方式【转】

    转自:http://blog.sina.com.cn/s/blog_9c7ba64d0101evar.html Java类获取spring 容器的bean 常用的5种获取spring 中bean的方式 ...

  10. 关于Spring中applicationContext.xml配置错误“org/springframework/transaction/interceptor/TransactionInterceptor”的问题解决

    问题描述: 在配置spring的applicationContext.xml中的默认事务管理器的时候可能会出现这样的错误: Error occured processing XML 'org/spri ...

随机推荐

  1. Android 平台下Ftp 使用模拟器需要注意的问题

    以下代码在pc上测试通过,可是在android模拟器上就不工作,不过还可以链接到服务器但不能得到文件 纠结了半天,原来是模式的问题,具体请Google 模拟器中采用建议被动模式 public void ...

  2. docker入门3:基础操作(2)

    -- 容器删除 docker rm CONTAIN_ID|CONTAIN_NAME -- 镜像删除 docker rmi IMAGE_ID|IMAGE_NAME -- 进入容器 docker exec ...

  3. Android开发Eclipse中DDMS中Heap使用及GC_EXTERNAL_ALLOC含义

    一.先说DDMS中的Heap的使用,通过可以观察VM中的Java内存,但是无法查看通过JNI分配的内存. 直接上图,废话少说... 图一:将要查看内存使用情况的项目Update heap 图二:操作项 ...

  4. Win7 32bit下一个hadoop2.5.1源代码编译平台的搭建各种错误遇到

    从小白在安装hadoop困难和错误时遇到说起,同时,我们也希望能得到上帝的指示. 首先hadoop更新速度非常快,最新的是hadoop2.5.1,因此就介绍下在安装2.5.1时遇到的各种困难. 假设直 ...

  5. Leetcode dfs Combination Sum

    Combination Sum Total Accepted: 17319 Total Submissions: 65259My Submissions Given a set of candidat ...

  6. 知乎C++问题整理

    如何平衡性能,合理选择C++STL集装箱? ANSER: 首先要搞清楚,假设STL问题,那么问题出在哪里? STL能够简单地觉得就是算法+数据结构,全部容器的算法选择和实现都是经过精心设计和严格測试的 ...

  7. Linux crontab 语法和具体的例子

    基本格式 : * * * * * command 分 时 日 月 周 命令 第1列表示分钟1-59 每分钟用*或者 */1表示 第2列表示小时1-23(0表示0点) 第3列表示日期1-31 第4列表示 ...

  8. ASP.NET Core 配置身份验证

    以AspUser的Password为例,去掉最少1个大写字母,1个小写字母等等坑爹的要求在Startup的ConfigureServices中进行配置 services.Configure<Id ...

  9. Java Policy

    # What The policy for a Java™ programming language application environment (specifying which permiss ...

  10. 在WPF中,如何得到任何Object对象的XAML代码?

    原文:在WPF中,如何得到任何Object对象的XAML代码? 在WPF中,可以使用System.Windows.Markup.XamlWriter.Save(objName)得到任何Object对象 ...