引入问题:

  在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. elasticsearch java索引的增删改查

    1.创建索引并插入数据 Map<String, Object> json = new HashMap<String, Object>(); json.put("use ...

  2. JSON字符串控制台格式化输出 java

    1.正常情况下返回的json数据格式如下: {"header":{"transSn":"e33128bb7622462ebfb2cbfcc46baa1 ...

  3. [转发]Android视频技术探索之旅:美团外卖商家端的实践

    美团技术团队 2019-09-12 20:02:11 背景 2013年美团外卖成立,至今一直迅猛发展.随着外卖业务量级与日俱增,单一的文字和图片已无法满足商家的需求,商家迫切需要更丰富的商品描述手段吸 ...

  4. spark-submit 参数总结

    spark-submit 可以提交任务到 spark 集群执行,也可以提交到 hadoop 的 yarn 集群执行. 1)./spark-shell --help   :不知道如何使用,可通过它查看命 ...

  5. java基于jcifs.smb实现远程发送文件到服务器

    1.服务器指定共享文件夹 1.1.验证服务器共享文件夹本地可以访问: 2.导入依赖的相关jar包         jcifs-1.3.**.jar: <dependency> <gr ...

  6. Http的请求协议请求行介绍

    请求协议包含的内容 请求行 GET /day04-tomcat/index.jsp HTTP/1.1 HTTP/1.1: 表示的是我们使用的是http协议的1.1版本 请求头 请求空行 请求体: 存储 ...

  7. thinkphp5 更改入口文件在主目录

    默认thinkPHP入口文件在public/index.php,而在虚拟主机部署时,不能设置访问路径,因此需要将入口文件放置在主目录上. 一.主目录下新建index.php 复制以下内容 // 定义应 ...

  8. Delphi repeat Until 运用

    procedure TForm3.SpeedButton1Click(Sender: TObject); Var I:integer; begin I:=; repeat I:=I+; ; ShowM ...

  9. C语言包含头文件时用引号和尖括号的区别

    用尖括号 #include <>:    一般用于包含标准的库头文件,编译器会去系统配置的库环境变量和者用户配置的路径去搜索,而不会在项目的当前目录去查找 用双引号 #include &q ...

  10. Flutter Swiper制作轮播效果

    1.引入flutter_swiper插件 flutter最强大的siwiper, 多种布局方式,无限轮播,Android和IOS双端适配. Flutter_swiper的GitHub地址:https: ...