引入问题:

  在XML配置文件中配置bean后,这些文件又是如何被加载的?它们被加载到哪里去了?

Spring容器——框架核心

  1、什么是Spring容器?它的功能是什么?

  在基于Spring的应用中,你的应用对象生存于Spring容器中。

  Spring容器负责创建对象、装配对象、配置对象并管理它们的整个生命周期,from birth to death!!(也可以是new到finalize())

  Spring容器使用DI管理构成应用的组件,它会创建相互协作的组件之间的关联。

  2、Spring自带了多个容器实现,可以归为哪两种不同的类型?

  • BeanFactory:最简单的容器,提供基本的DI支持(对多数应用很低级);
  • 应用上下文:基于BeanFactory构建,提供框架级别的服务。

  

  3、上一节提到,Spring中自带了多种Application Context的实现,他们的主要区别在于如何加载配置。罗列出常用的加载ApplicationContext的方式。

  • FileSystemXmlApplicationContext ---从文件系统下的一个或者多个XML配置文件架子啊上下文定义。在这里,您需要将XML bean配置文件的完整路径提供给构造函数。

  • ClassPathXmlApplicationContext---这个容器从一个XML文件中加载bean的定义。这里你不需要提供XML文件的完整路径,但是你需要正确设置CLASSPATH,这里把应用上下文的定义文件作为类资源。

  • WebXmlApplicationContext---该容器从Web应用下的一个或者多个XML配置文件加载上下文定义。

  • AnnotationConfigApplicationContext---从基于Java的配置类中加载Spring应用上下文;
  • AnnotationConfigWebApplicationContext---从基于Java的配置类中加载Spring Web应用上下文

  4、使用文件系统和类路径加载ApplicationContext的代码差不多:

  ApplicationContext context=new FileSystemXmlAplicaitonContext("c:/spring-mvc.xml");

  ApplicaitonContext context=new ClassPathXmlApplicationContext("spring-mcv.xml");

  (classpath就是存放.class等编译后文件的路径。)

  5、从Java配置中加载ApplicationContext,把配置类的全路径作为参数。

  ApplicationContext context=new AnnotationConfigApplicationContext(con.biguo.SpringConfig.class);

  6、加载应用上下文后,怎么获取bean?

  使用ApplicationContext对象的的getBean(xxx.class)方法从Spring容器中获取bean。

Spring中bean的生命周期

  7、传统Java应用bean的声明周期:

  new进行实例化后便可以使用bean,再由Java自动进行垃圾回收。

  8、Spring中bean的生命周期很复杂,在bean准备就绪之前,bean工厂执行了多个启动步骤(调用了各种方法)。这些步骤也是Spring提供的扩展点,让开发者自定义bean 的创建过程。流如下:

  • Spring对bean实例化;
  • Spring将值和bean的引用注入到bean对应的属性;
  • 如果bean实现了BeanNameAware接口,Spring将beande ID传递给setBeanName()方法;
  • 如果bean实现了BeanFactoryAware接口,Spring将调用setBeanFactory()方法,将BeanFactory容器实例传入;
  • 如果bean实现了ApplicationContextAware接口,Spring将调用set Application Context()方法,将bean所在的应用上下文的引用传入进来;
  • 如果bean实现了BeanPostProcessor接口,Spring将调用它们的postProcessBeforeInitialization()方法;
  • 如果bean实现了InitializingBean接口,Spring将调用它们的afterPropertiesSet()方法。类似的,如果bean使用了init-method声明了初始化方法,该方法也会被调用
  • 调用自定义的初始化方法;
  • 如果bean实现了BeanPostProcessor接口,Spring将调用它们的postProcessAfterInitialization()方法;
  • bean准备就绪,可以使用了。它们将一直驻留在应用上下文中,直到该应用上下文被销毁。
  • 容器关闭
  • 如果bean实现了DisposableBean接口,Spring将调用它的destroy()接口方法。同样,如果bean使用了destroy-method声明了销毁方法,该方法也会被调用。

  这一节了解了如何创建和加载一个(空的)Spring容器,接下来会探讨如何将应用对象装配进Spring容器。

 

Spring实战(二)Spring容器和bean的生命周期的更多相关文章

  1. Spring(十二):IOC容器中Bean的生命周期方法

    IOC容器中Bean的生命周期方法 1)Spring IOC容器可以管理Bean的声明周期,Spring允许在Bean生命周期的特定点执行定制的任务. 2)Spring IOC容器对Bean的生命周期 ...

  2. 7 -- Spring的基本用法 -- 9...容器中Bean的生命周期

    7.9 容器中Bean的生命周期 Spring可以管理singleton作用域的Bean的生命周期,Spring可以精确地知道该Bean何时被创建,何时被初始化完成.容器何时准备销毁该Bean实例. ...

  3. Spring容器中bean的生命周期以及关注spring bean对象的后置处理器:BeanPostProcessor(一个接口)

    Spring IOC 容器对 Bean 的生命周期进行管理的过程: 1.通过构造器或工厂方法创建 Bean 实例 2.为 Bean 的属性设置值和对其他 Bean 的引用 3.将 Bean 实例传递给 ...

  4. Spring学习-- IOC 容器中 bean 的生命周期

    Spring IOC 容器可以管理 bean 的生命周期 , Spring 允许在 bean 声明周期的特定点执行定制的任务. Spring IOC 容器对 bean 的生命周期进行管理的过程: 通过 ...

  5. Spring 容器中 Bean 的生命周期

    Spring 容器中 Bean 的生命周期 1. init-method 和 destory-method 方法 Spring 初始化 bean 或销毁 bean 时,有时需要作一些处理工作,因此 s ...

  6. spring IOC 容器中 Bean 的生命周期

    IOC 容器中 Bean 的生命周期: 1.通过构造器或工厂方法创建 Bean 实例 2.为 Bean 的属性设置值和对其他 Bean 的引用 3.调用 Bean 后置处理器接口(BeanPostPr ...

  7. Spring IOC容器中Bean的生命周期

    1.IOC容器中Bean的生命周期 构造器函数 设置属性 初始化函数(在Bean配置中 init-method) 使用Bean 结束时关闭容器(在Bean中配置destroy-method) 2.Be ...

  8. Spring 使用介绍(十三)—— Bean的生命周期

    一.概述 Spring Bean的完整生命周期从创建Spring容器开始,直到最终Spring容器销毁Bean,生命周期时序图如下: 二.生命周期接口分类 Bean的生命周期经历了多个接口方法的调用, ...

  9. IOC容器中bean的生命周期

    一.Bean的生命周期 Spring IOC容器可以管理Bean的生命周期,允许在Bean生命周期的特定点执行定制的任务. Spring IOC容器对Bean的生命周期进行管理的过程如下: (1).通 ...

  10. Spring4学习回顾之路06- IOC容器中Bean的生命周期方法

    SpringIOC容器可以管理Bean的生命周期,Spring允许在Bean生命周期的特定点执行特定的任务! Spring IOC容器对Bean的生命周期进行管理的过程: -通过构造器或者工厂方法创建 ...

随机推荐

  1. pod package 生成 Framework

    pod package 生成 Framework pod package 是 cocoapods 的一个插件,如果没有的话使用以下命令安装: sudo gem install cocoapods-pa ...

  2. 第11组 Alpha冲刺(6/6)

    第11组 Alpha冲刺(6/6)   队名 不知道叫什么团队 组长博客 https://www.cnblogs.com/xxylac/p/11913626.html 作业博客 https://edu ...

  3. Razor字符串处理

    需要注意的是低版本是不支持C# 6语法中的string interpolation的 <label> @if (!string.IsNullOrEmpty(Model.BudgetValu ...

  4. 周志华-机器学习西瓜书-第三章习题3.5 LDA

    本文为周志华机器学习西瓜书第三章课后习题3.5答案,编程实现线性判别分析LDA,数据集为书本第89页的数据 首先介绍LDA算法流程: LDA的一个手工计算数学实例: 课后习题的代码: # coding ...

  5. 朴素贝叶斯算法python实现

    朴素贝叶斯是一种十分简单的分类算法,称其朴素是因为其思想基础的简单性,就文本分类而言,他认为词袋中的两两词之间的关系是相互独立的,即一个对象的特征向量中的每个维度都是互相独立的.这是朴素贝叶斯理论的思 ...

  6. 【MYSQL】存储过程示例

    GROUPEMP_EXISTS: ), ), )) LANGUAGE SQL NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT ' ...

  7. Win7 双系统安装Centos7,并由windows引导程序引导

    1. 在windows磁盘管理中,压缩卷,腾出40G,需保证一个磁盘设备最多只有3个主分区2. 网上下载centos7的dvd.iso3. 使用UltraISO刻录到U盘4. 重启系统F12使用usb ...

  8. C++ STL 排序查找最大的5个

    #include <iostream>#include <algorithm>#include <deque>#include <vector>#inc ...

  9. 搭建无人值守安装服务器(CentOS)

    使用PXE+DHCP+TFTP+Kickstart+FTP搭建无人值守安装服务器.一般只有频繁安装系统才会搭建无人值守安装服务器. 虚拟机环境:youxi1,CentOS7系统双网卡,一个网卡桥接模式 ...

  10. 如何解决滚动条scrollbar出现造成的页面宽度被挤压的问题

    参考如下: https://www.ucloud.cn/yun/114228.html