Spring 中常见的容器

  我们知道spring容器就是spring中bean的驻留场所。spring容器并不是只有一个。spring自带了多个容器实现,可以归为两种不同的类型:bean工厂和应用上下文。bean工厂是最简单的容器,提供了基本的Di支持;而应用上下文是基于beanFactory构建,并提供了应用框架级别的服务,例如从属性文件解析文本信息以及发布应用实践给感性趣的事件监听者。

  虽然我们可以在bean工厂和应用上下文之间任选一种,但是bean工厂对于大多数应用来说往往太低级了,因此,应用上下文要比bean工厂更受欢迎。所以下面我们重点讨论的都是应用上下文对bean的管理

两类容器的区别:

  • BeanFactory

  BeanFactory采用了工厂设计模式,负责读取bean配置文档,管理bean的加载,实例化,维护bean之间的依赖关系,负责bean的生命周期。BeanFactory在解析配置文件时并不会初始化对象,只有在使用对象getBean()才会对该对象进行初始化

  • ApplicationContext(接口)

  ApplicationContext除了提供上述BeanFactory所能提供的功能之外,还提供了更完整的框架功能:国际化支持、aop、事务等。而ApplicationContext在解析配置文件时对配置文件中的所有对象都初始化了,getBean()方法只是获取对象的过程,这样可以确保应用不需要等待他们被创建。

  spring自带了很多种类型的应用上下文,常见的有如下几种:

     1.AnnotationConfigApplicationContext:从一个或多个基于java的配置类中加载spring上下文定义,适用于java注解的方式;

    2.ClassPathXmlApplicationContext:从类路径下的一个或多个xml配置文件中加载上下文定义,把应用上下文的定义文件作为类资源。适用于xml配置的方式;

    3.FileSystemXmlApplicationContext:从文件系统下的一个或多个xml配置文件中加载上下文定义,也就是说系统盘符中加载xml配置文件;

    4.AnnotationConfigWebApplicationContext:从一个或多个基于java的配置类中加载spring web应用上下文。专门为web应用准备的,适用于注解方式;

    5.XmlWebApplicationContext:从web应用下的一个或多个xml配置文件加载上下文定义,适用于xml配置方式

Spring如何管理bean

  注意:这里我们是以应用上下文管理bean为例的。

  以<bean id="airplane" class="spring.Airplane"/>为例,spring在启动的时候,会创建应用上下文容器,而所有的bean都是在创建应用上下文容器的时候进行加载的,大致流程就是,应用上下文对象会根据我们传入的配置文件路径去加载这个配置文件,然后解析配置文件的<beans>标签下的<bean>标签,然后会对每个bean标签进行解析,这时会根据我们在bean标签中配置的属性(这里我们只定义了id和class)给每一个bean实例化一个BeanDefinition,同时会把这些BeanDefinition对象放入到应用上下文中的一个List<BeanDefinition>集合中,接着就是对List<BeanDefinition>进行循环并且通过class的值通过反射,实例化bean,最后将实例化的bean维护到一个map中,map的key就是bean的id,map的value就是bean的实例化对象,最后我们就可以通过id来获取我们想要的bean了,但是这里只是简单的介绍了bean的加载,应用上下文所做的事情远不止这些,还有对懒加载bean的维护,对bean之间依赖关系的维护(就是我们常说的依赖关系,其实也是通过一个Map<String, Set<String>>类型ConcurrentHashMap来维护的)等等。

 

Spring中bean的管理的更多相关文章

  1. Spring中Bean的管理问题

    首先,配置文件中定义的bean并不是都在启动时实例化. <bean id="accountService" class="com.foo.DefaultAccoun ...

  2. Spring中Bean的生命周期及其扩展点

    原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/6106456.html Spring中Bean的管理是其最基本的功能,根据下面的图来了解Spr ...

  3. Spring中Bean管理的常用注解

    在Spring中,主要用于管理bean的注解分为四大类:1.用于创建对象.2.用于给对象的属性注入值.3.用于改变作用的范围.4.用于定义生命周期.这几个在开发中经常接触到,也可以说每天都会遇见.其中 ...

  4. Spring中Bean的作用域、生命周期

                                   Bean的作用域.生命周期 Bean的作用域 Spring 3中为Bean定义了5中作用域,分别为singleton(单例).protot ...

  5. Spring中Bean的实例化

                                    Spring中Bean的实例化 在介绍Bean的三种实例化的方式之前,我们首先需要介绍一下什么是Bean,以及Bean的配置方式. 如果 ...

  6. JAVA面试题:Spring中bean的生命周期

    Spring 中bean 的生命周期短暂吗? 在spring中,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean的别名只能维持一 ...

  7. Spring中的事务管理详解

    在这里主要介绍Spring对事务管理的一些理论知识,实战方面参考上一篇博文: http://www.cnblogs.com/longshiyVip/p/5061547.html 1. 事务简介: 事务 ...

  8. spring对bean的管理细节

    <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...

  9. 简:Spring中Bean的生命周期及代码示例

    (重要:spring bean的生命周期. spring的bean周期,装配.看过spring 源码吗?(把容器启动过程说了一遍,xml解析,bean装载,bean缓存等)) 完整的生命周期概述(牢记 ...

随机推荐

  1. Windows 10 Tensorflow 2 gpu正式版安装和更新日志

    Windows 10 Tensorflow 2 gpu正式版安装和更新日志 Tensorflow 2.0.0 released on2019年10月1日星期二 Link: https://github ...

  2. Oracle列信息表 all_tab_columns中的data_length和data_precision字段区别

    Oracle列信息表 all_tab_columns中的data_length和data_precision字段区别 区别: 这两个属性都属于user_tab_columns视图,他们的含义:1,da ...

  3. flutter Slider滑块组件

    滑块,允许用户通过滑动滑块来从一系列值中选择. import 'package:flutter/material.dart'; class SliderDemo extends StatefulWid ...

  4. jenkins发布程序触发shell调用python脚本刷新akamai cdn api

    刷新cdn的流程:jenkins获取git中的代码,触发脚本推送到生产环境中(即cdn的源站) --> 触发脚本获取git工作目录的更新列表,将更新列表拼凑成带域名信息的url,写入到目录中 - ...

  5. pytorch Containers的Module部分

    参考:https://pytorch.org/docs/stable/nn.html Containers Module CLASS torch.nn.Module 所有神经网络模块的基类 你定义的模 ...

  6. 004-行为型-09-访问者模式(Visitor)

    一.概述 它分离对象的数据和行为,使用Visitor模式,可以不修改已有类的情况下,增加新的操作. 主要解决:稳定的数据结构和易变的操作耦合问题. 注意事项:访问者可以对功能进行统一,可以做报表.UI ...

  7. linux配置docker报错:ImportError: No module named yum

    如题,安装docker后配置仓库报错: [root@centos ~]# yum-config-manager --add-repo https://download.docker.com/linux ...

  8. VS编译出错不自动运行上次的程序

  9. 搭建iscsi存储系统(一)

    (1).DAS.SAN.NAS三种存储方式 参考:https://blog.csdn.net/qq_23348071/article/details/73963407 DAS全称Direct-Atta ...

  10. 常用HTML转义字符,html转义符,JavaScript转义符,html转义字符表,HTML语言特殊字符对照表(ISO Latin-1字符集)

    HTML字符实体(Character Entities),转义字符串(Escape Sequence) 为什么要用转义字符串? HTML中<,>,&等有特殊含义(<,> ...