Spring中bean的管理
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的管理的更多相关文章
- Spring中Bean的管理问题
首先,配置文件中定义的bean并不是都在启动时实例化. <bean id="accountService" class="com.foo.DefaultAccoun ...
- Spring中Bean的生命周期及其扩展点
原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/6106456.html Spring中Bean的管理是其最基本的功能,根据下面的图来了解Spr ...
- Spring中Bean管理的常用注解
在Spring中,主要用于管理bean的注解分为四大类:1.用于创建对象.2.用于给对象的属性注入值.3.用于改变作用的范围.4.用于定义生命周期.这几个在开发中经常接触到,也可以说每天都会遇见.其中 ...
- Spring中Bean的作用域、生命周期
Bean的作用域.生命周期 Bean的作用域 Spring 3中为Bean定义了5中作用域,分别为singleton(单例).protot ...
- Spring中Bean的实例化
Spring中Bean的实例化 在介绍Bean的三种实例化的方式之前,我们首先需要介绍一下什么是Bean,以及Bean的配置方式. 如果 ...
- JAVA面试题:Spring中bean的生命周期
Spring 中bean 的生命周期短暂吗? 在spring中,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean的别名只能维持一 ...
- Spring中的事务管理详解
在这里主要介绍Spring对事务管理的一些理论知识,实战方面参考上一篇博文: http://www.cnblogs.com/longshiyVip/p/5061547.html 1. 事务简介: 事务 ...
- spring对bean的管理细节
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...
- 简:Spring中Bean的生命周期及代码示例
(重要:spring bean的生命周期. spring的bean周期,装配.看过spring 源码吗?(把容器启动过程说了一遍,xml解析,bean装载,bean缓存等)) 完整的生命周期概述(牢记 ...
随机推荐
- configure-nginx-how-to-handle-500-error-on-upstream-itself-while-nginx-handle 自定义header 传递header 定义拦截器
应用程序拦截 nginx 拦截 保证 接口返回 https://serverfault.com/questions/859667/configure-nginx-how-to-handle-500-e ...
- 当fixed元素相互嵌套时,父元素会影响子元素的层叠关系,最好不要嵌套使用fixed
问题:fixed元素被另一个fixed元素包含的时候在chrome下fixed子元素的定位会受到父元素的影响. 解释:层叠关系是受层叠上下文影响的.文档中的层叠上下文由满足以下任意一个条件的元素形成: ...
- Java static静态关键字 有啥用
#static有啥用 在Java语言中,static表示“静态”的意思,使用场景可以用来修饰成员变量和成员方法,当然也可以是静态代码块.static的主要作用在于创建独立于具体对象的域变量或者方法. ...
- SQLServer 临时表的使用
临时表在Sqlserver数据库中,是非常重要的,下面就详细介绍SQL数据库中临时表的特点及其使用,仅供参考. 临时表与永久表相似,但临时表存储在tempdb中,当不再使用时会自动删除.临时表有两种类 ...
- Windows系统CPU和内存状态实时查询(Java)
一.背景 需要查询Windows服务器的CPU和内存状态. Linux系统查询CPU和内存状态很简单,一个top命令搞定,Windows就稍微麻烦一些了. 经过资料查找,发现jdk目前不能直接查询系统 ...
- Centos7 安装 weblogic12.2.1.0.0
下载地址:地址:http://www.oracle.com/technetwork/middleware/weblogic/downloads/wls-main-097127.html 下载最新的we ...
- 开源配置中心xxl-conf的核心原理分析
XXL-CONF是一款轻量级的开源配置中心项目,由国内大牛许雪里开发.下面是官方对其优点作出的描述: 一个轻量级分布式配置管理平台,拥有"轻量级.秒级动态推送.多环境.跨语言.跨机房.配置监 ...
- Qt编写自定义控件71-圆弧进度条
一.前言 现在web形式的图表框架非常流行,国产代表就是echart,本人用过几次,三个字屌爆了来形容,非常强大,而且易用性也非常棒,还是开源免费的,使用起来不要太爽,内置的各种图表和仪表盘等非常丰富 ...
- idea使用快捷键ALT+/的时候,本来想在new后面创建对象,结果又出来一个new
我们知道eclipse的自动提示补齐new 后面的对象的快捷键是ALT+/,当我使用idea的时候,把idea的快捷键换成了eclipse的风格. 然而当我按下ALT+/的时候,就给我自动输入了一个n ...
- Mathjax与LaTex公式简介
MathJax与LaTex公式简介 (转载) PS: 原文链接写的非常好!!! 博主写这篇文章,一是为了防止原链接失效,二是在cnblogs上测试MathJax; 本文从math.stackexcha ...