一、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. bash profile .bashrc

    /etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置. /etc/bashrc:为每一 ...

  2. jquery文件上传

    http://www.jb51.net/Special/799.htm http://www.oschina.net/project/tag/356/jquery-file-upload

  3. Python面试题

    1.Python装饰器 详情 2.设置多个Python项目使用不同版本的Python和第三方库 使用PyEnv 详情 3.PEP8 详情 4.参数传递 按引用传递 5.列表解析,字典解析 详情 6.列 ...

  4. python中string模块

    >>> import string >>> string.ascii_letters 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKL ...

  5. C# 时间函数相减

    1:第一种方式: "; "; DateTime firstDateTemp = DateTime.ParseExact(firsttime, "yyyyMMddHHmms ...

  6. GetStoredProcCommand和GetSqlStringCommand的区别

    原文:http://www.ithao123.cn/content-4004602.html http://hi.baidu.com/847270942/blog/item/c224dd557ff74 ...

  7. GridView 使用方法总结

    http://www.cnblogs.com/sufei/archive/2010/03/27/1698590.html  地址

  8. 40、dom以xml结尾的文件

    1.student.xml文件 <?xml version="1.0" encoding="utf-8" ?> <!-- 1.书写根元素(因为 ...

  9. MySQL效能监控工具mysqlreport安装和中文说明

    管理 mysql 最让人困扰的就是如何有效的掌握 MySQL 的健康状况,因为 MySQL 虽然有提供许多系统变量值供您参考,但这些零散的数据若要手动搜集与过滤将会是一件十分没有效率的事情(除非您写 ...

  10. (转)javascript异步编程的四种方法

    本文转自:http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html 作者:阮一峰 本文仅仅作为个人mark ...