一、ioc容器

ioc (inversion of  control)即控制反转,把某一个接口选择实现类的控制权转移给Spring容器来管理。调用类对该实现类的依赖关系由ioc容器注入(DI),传统的应用程序我们都是在类内部创建依赖对象,而Spring采用依赖注入的方式即 DI ,从而降低了类与类之间的耦合度。

一般我们把BeanFactory称为ioc容器,把ApplicationContext称为应用上下文,是Spring的核心。

二、当Spring容器启动时,首先会读取配置文件中的相关信息,并在Spring容器中生成一份bean配置信息注册表(BeanDefinition),然后根据配置信息注册表实例化bean装配bean之间的依赖关系,然后将bean实例放入bean缓存池中供应用程序使用。bean缓冲池由HashMap实现的,以bean的beanName为键。

三、BeanFactory

继承关系

BeanFactory bf=new XmlBeanFactory(new ClassPathResource("beans.xml"));
bf.getBean("");
ResourcePatternResolver rpr=new PathMatchingResourcePatternResolver();
Resource r=rpr.getResource("com/lq/ioc/beans.xml");
BeanFactory bf=new XmlBeanFactory(r);

ApplicationContext

继承关系

ApplicationContext ctx =new ClassPathXmlApplicationContext("com/lq/ioc/beans.xml");

        ApplicationContext ctx =new FileSystemXmlApplicationContext("com/lq/ioc/beans.xml");

        ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[]{"conf/beans1.xml","conf/beans2.xml"});

ApplicationContext和BeanFactory的区别:

1、ApplicationContext 在容器启动时会把所有单实例的bean放入缓冲池中,可以通过配置lazy-init=true来延迟加载,  BeanFactory则采用延迟加载的形式,在容器启动时并不会实例化bean,直到第一次加载的时候才去实例化bean.对于单实例的bean,ApplicationContext中每次取出来都是同一个,而BeanFactory则每次取出来的是不同的bean.

2、两者均支持BeanPostProcessor、BeanFactoryPostProcessor(后置处理器)的使用,但是BeanFactory要通过  addBeanPostProcessor(new MyBeanPost())来手动注册,ApplicationContext则不需要手动注册。

WebApplicationContext

只能在web环境中使用,从WebApplicationContext中可以获得ServletContext的引用,整个web应用上下文对象将作为属性放入ServletContext中,Spring提供一个工具类WebApplicationContextUtils中的getWebApplicationContext(ServletContext sc)可以获得WebApplicationContext实例。

继承关系

由于 Web 应用比一般的应用拥有更多的特性,因此WebApplicationContext 扩展了ApplicationContext。WebApplicationContext 定义了一个常量ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,在上下文启动 时,WebApplicationContext 实例即以此为键放置在ServletContext 的属性列表中,因此我们可以直接通过以下语句从Web 容器中获取
WebApplicationContext:
WebApplicationContext wac = (WebApplicationContext)servletContext.getAttribute(
WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);

在web.xml文件中的配置

1、使用监听的方式
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/student.xml, /WEB-INF/person.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener </listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/student.xml, /WEB-INF/person.xml </param-value>
</context-param> <servlet>
<servlet-name>springContextLoaderServlet</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet </servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

Spring ioc容器的更多相关文章

  1. Spring IoC容器的初始化过程

    Spring IoC容器的初始化包括 BeanDefinition的Resource定位.载入和注册 这三个基本的过程.IoC容器的初始化过程不包含Bean依赖注入的实现.Bean依赖的注入一般会发生 ...

  2. 【Spring】非Spring IOC容器下获取Spring IOC上下文的环境

    前言 在Spring Web项目中,有些特殊的时候需要在非Spring IOC容器下获取Spring IOC容器的上下文环境,比如获取某个bean. 版本说明 声明POM文件,指定需引入的JAR. & ...

  3. 学习Spring(一) 实例化Spring IoC容器

    实例化Spring IoC容器 1,读取其配置来创建bean实例 2,然后从Spring IoC容器中得到可用的bean实例 Spring提供两种IoC容器实现类型 a,一种为bean工厂 b,应用程 ...

  4. MyEclipse Spring 学习总结一 Spring IOC容器

    一.Spring IOC容器---- Spring AllicationContext容器 程序的结构如下: 1.首先在MyEclipse 创建创建Java Project 2.创建好后,添加spin ...

  5. 对Spring IoC容器实现的结构分析

    本文的目标:从实现的角度来认识SpringIoC容器. 观察的角度:从外部接口,内部实现,组成部分,执行过程四个方面来认识SpringIoC容器. 本文的风格:首先列出SpringIoC的外部接口及内 ...

  6. spring IOC容器实例化Bean的方式与RequestContextListener应用

    spring IOC容器实例化Bean的方式有: singleton 在spring IOC容器中仅存在一个Bean实例,Bean以单实例的方式存在. prototype 每次从容器中调用Bean时, ...

  7. 解读Spring Ioc容器设计图

    在Spring Ioc容器的设计中,有俩个主要的容器系列:一个是实现BeanFactory接口的简单容器系列,这系列容器只实现了容器最基本的功能:另外一个是ApplicationContext应用上下 ...

  8. 纯注解快速使用spring IOC容器

    使用spring的ioc容器实现对bean的管理与基本的依赖注入是再经典的应用了.基础使用不在详述. 这里主要介绍下使用注解实现零配置的spring容器.我相信你也会更喜欢使用这种方式.Spring ...

  9. Spring IOC容器分析(2) -- BeanDefinition

    上文对Spring IOC容器的核心BeanFactory接口分析发现:在默认Bean工厂DefaultListableBeanFactory中对象不是以Object形成存储,而是以BeanDefin ...

  10. Spring IOC容器分析(4) -- bean创建获取完整流程

    上节探讨了Spring IOC容器中getBean方法,下面我们将自行编写测试用例,深入跟踪分析bean对象创建过程. 测试环境创建 测试示例代码如下: package org.springframe ...

随机推荐

  1. html5的FormData对象和input的file属性以及window.URL.createObjectURL( ) 方法(转载)

    /** FormData ==>表单数据 能自动把表单数据拼接打包 当ajax发送数据时,发送打包的数据; 还可以使用FormData对象的append(key,value)添加数据 FormD ...

  2. MS - 1 - 把二元查找树转变成排序的双向链表

    ## 1. 把二元查找树转变成排序的双向链表 ## ### 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表. ### 要求不能创建任何新的结点,只调整指针的指向. 10       ...

  3. Ninject之旅之三:Ninject对象生命周期

    摘要 DI容器的一个责任是管理他创建的对象的生命周期.他应该决定什么时候创建一个给定类型的对象,什么时候使用已经存在的对象.他还需要在对象不需要的时候处理对象.Ninject在不同的情况下管理对象的生 ...

  4. ubuntu客户端使用RDP协议连接windows服务器

    如果服务器是linux或unix,可以使用ssh远程连接服务器.也有服务器是windows的,通常使用RDP协议进行连接. 1  环境 客户端:ubuntu14.04 LST 服务器:windows ...

  5. Android异常:唤醒锁未授权。(Caused by: java.lang.SecurityException: Neither user 10044 nor current process has android.permission.WAKE_LOCK.)

    Android异常:Caused by: java.lang.SecurityException: Neither user 10044 nor current process has android ...

  6. C# 异常处理 <-> 连接远程数据库遇到的问题

    PS : 移植类库需要重新生成解决方案:(要不然不能将类库添加进项目)

  7. hive中rcfile格式(收藏文)

    首先声明,此文是属于纯粹收藏文,感觉讲的很不错. 本文介绍了Facebook公司数据分析系统中的RCFile存储结构,该结构集行存储和列存储的优点于一身,在MapReduce环境下的大规模数据分析中扮 ...

  8. 常用的CentOS 7系统yum源集合

    常用的CentOS 7系统yum源集合   yum源对于linux系统的安装有非常大的帮助了,下面小编为各位整理了常用的CentOS 7系统yum源集合了,希望这篇文章能够对各位有所帮助的哦.   记 ...

  9. javascript检查移动设备是否支持重力方向感应

    javascript如何检查移动设备,如手机平台是否支持重力或者方向感应. 可以使用html5提供的重力和方向感应接口来判断. html5 中针对高端手机提供了重力感应和重力加速的接口,开发可以利用这 ...

  10. PHP面向对象_重载新的方法(parent::)

    在学习PHP 这种语言中你会发现, PHP中的方法是不能重载的, 所谓的方法重载就是定义相同的方法名,通过“参数的个数“不同或“参数的类型“不 同,来访问我们的相同方法名的不同方法.但是因为PHP是弱 ...