Bean是Spring管理的基本单位,在Spring的J2EE应用中,所有的组件都是bean,bean包括数据源、Hibernate的SessionFactory及事务管理器等。Spring里的bean是非常广义的概念,任何的Java对象,Java组件都可别当成bean处理。
BeanFactory-->Spring容器最基本的接口。BeanFactory负责配置、创建及管理bean,以及bean与bean之间的依赖关系。
BeanFactory接口包含如下的基本方法:
Boolean containsBean(String name):
判断Spring容器是否包含id为name的bean定义。
Object getBean(String name):
返回容器id为name的bean.
Object getBean(String name, Class requiredType):
返回容器中id为name,并且类型为requiredType的bean.
Class getType(String name):
返回容器中id为name的bean的类型.
Bean的基本定义:
通常必须的两个属性:
1 id
2 class
很显然bean的实例化可以通过BeanFactory的getBean()方法得到.
在Spring1.2中,bean在Spring的容器中有两种基本类型:
1singleton:单态
2not-singleton或prototype:原型
每次请求id为not-singleton类型的bean时,Spring都会新建一个bean实例,然后返回给程序.通常要求将Web应用的控制器bean配置成non-singleton类型。因为,每次HttpServletRequest都需要系统启动一个新Action来处理用户请求。如果不指定bean的基本行为,Spring默认使用singleton类型,non-singleton类型的bean的创建、销毁代价比较大,而singleton类型的bean实例成功后,可以重复使用,因此,建议应尽量避免将bean设置成为non-singleton类型。
创建bean的实例通常有以下方法:
1 调用构造器创建一个bean实例
通过"new"关键字创建bean实例
2 BeanFactory调用某个类的静态工厂方法创建bean
使用静态工厂创建bean实例时,class属性也是必需的,但此时class属性并不是该实例的实现类,而是静态工厂类。由于Spring需要知道由哪个静态工厂方法来创建bean实例,因此使用factory-method属性来确定静态工厂方法名。
3 BeanFactory调用实例工厂方法创建bean
实例工厂方法必须提供工厂实例,因此必须在配置文件中配置工厂实例,而bean元素无需class属性,因为BeanFactory不再直接实例化该bean,仅仅是执行工厂的方法,负责生成bean实例.
实例工厂方法和静态工厂方法用法基本相似,我们来看看它门的区别和相同点:
区别:
1 调用实例工厂方法创建bean时,必须将实例工厂配置成bean实例,而静态工 厂方法则无须配置工厂bean.
2 调用实例工厂方法创建bean时,必须使用factory-bean属性来确定工厂bean, 而静态工厂方法则使用class元素确定静态工厂类.
相同点:
1 都需使用factory-method属性指定产生bean实例的工厂方法
2 工厂方法需要参数,都使用construtor-arg属性确定参数值
3 其他依赖注入属性,都使用property元素确定参数值
分享到:
相关推荐
BeanFactory的Bean的生命周期流程图
本篇文章主要介绍了Spring中BeanFactory解析bean详解 ,详细的介绍了使用BeanFactory对bean进行解析的实例,有兴趣的可以了解一下。
Spring IOC和DI概述,Bean的配置形式,IOC容器BeanFactory和ApplicationContext概述,依赖注入的方式,属性注入,构造器注入等案例
NULL 博文链接:https://ylxy3058.iteye.com/blog/2223489
BeanFactory 和 ApplicationContext 有什么区别 > BeanFactory 可以理解为含有 bean 集合的工厂类。BeanFactory 包含了种 bean 的定 义, 以便在接收到客户端请求时将对应的 bean 实例化。 > BeanFactory 还能在实例...
BeanFactory 和 ApplicationContext 有什么区别 > BeanFactory 可以理解为含有 bean 集合的工厂类。BeanFactory 包含了种 bean 的定义, 以便在接收到客户端请求时将对应的 bean 实例化。 > BeanFactory 还能在实例...
熊小泉 关于 tiny-spring是简化版的spring框架,能帮助您...定义一个简单的bean容器BeanFactory,内部包含一个地图可以保存bean,只有注册bean和获取bean两个方法 public class BeanFactory { private Map<String> bea
spring1.0.0源码,从中可以分析spring相关设计思想。工厂bean,beanFactory,APO,springmvc等
BeanFactory是用于访问Spring Bean容器的根接口,是一个单纯的Bean工厂,也就是常说的IOC容器的顶层定义,各种IOC容器是在其基础上为了满
Spring的生命周期是指实例化Bean时所经历的一系列阶段,即通过getBean()获取bean对象及设置对象属性时,Spring框架做了哪些事。...本文分别对 BeanFactory 和 ApplicationContext 中的生命周期进行分析。
所有在xml里配置的Bean标签最后都会转换为BeanDefinition对象存放在beanFactory里的beanDefinitionMap中。实例化完成的Bean对象存放在singletonObjects当中。 FileSystemXmlApplicationContext是加载磁盘里具体位置...
本文深入探讨了Spring的核心API,包括BeanFactory、BeanDefinition以及事务管理等关键组件。 BeanFactory是Spring框架的心脏,作为Bean容器的根接口,它采用工厂模式来管理Bean的生命周期。BeanDefinition则详细描述...
Spring有两个核心接口:BeanFactory和ApplicationContext,其中ApplicationContext是BeanFactory的子接口。他们都可代表Spring容器,Spring容器是生成Bean实例的工厂,并且管理容器中的Bean。 Bean是Spring管理的...
Spring 大量引入了Java 的Reflection机制,通过动态调用的方式避免硬编码方式的约束,并在此基础上建立了其核心组件BeanFactory,以此作为其依赖注入机制的实现基础。org.springframework.beans包中包括了这些核心...
//这里根据bean的名字和Class类型来得到bean实例,和上面的方法不同在于它会抛出异常:如果根据名字取得的bean实例的Class类型和需要 Object getBean(String name, Class requiredType) throws BeansException; //...
AbstractApplicationContext.refresh(){ 1.为刷新准备此上下文 prepareRefresh(){ ...配置工厂的标准上下文特征,例如上下文的类加载器和后置处理器。 prepareBeanFactory(beanFactory){ . . .
10. //这里根据bean的名字和Class类型来得到bean实例,和上面的方法不同在于它会抛出异常:如果根据名字取得的bean实例的Class类型和需要的不同的话。 11. Object getBean(String name, Class requiredType) ...
搞清楚BeanFactory家族的接口和类的作用 2. 搞清楚ApplicationContext家族的接口和类的作用 3. 搞清楚BeanDefinitionRegistry和SingletonBeanRegistry的作用 4. 搞清楚注册BeanDefinition流程中各个类的作用 5. 搞...
3.1声明父bean和子bean 3.1.1抽象基bean类型 3.1.2抽象共同属性 3.2方法注入 3.2.1基本的方法替换 3.2.2获取器注入 3.3注入非springbean 3.4注册自定义属性编辑器 3.5使用spring的特殊bean 3.5.1后处理bean...