`
yuanyao
  • 浏览: 145520 次
  • 性别: Icon_minigender_1
  • 来自: 就那小山沟
社区版块
存档分类
最新评论

Bean和BeanFactory

阅读更多
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的生命周期.pdf

    BeanFactory的Bean的生命周期流程图

    Spring中BeanFactory解析bean详解

    本篇文章主要介绍了Spring中BeanFactory解析bean详解 ,详细的介绍了使用BeanFactory对bean进行解析的实例,有兴趣的可以了解一下。

    Spring的Bean配置

    Spring IOC和DI概述,Bean的配置形式,IOC容器BeanFactory和ApplicationContext概述,依赖注入的方式,属性注入,构造器注入等案例

    二、Spring源码分析——BeanFactory

    NULL 博文链接:https://ylxy3058.iteye.com/blog/2223489

    1开源框架面试专题及答案.pdf

    BeanFactory 和 ApplicationContext 有什么区别 > BeanFactory 可以理解为含有 bean 集合的工厂类。BeanFactory 包含了种 bean 的定 义, 以便在接收到客户端请求时将对应的 bean 实例化。 > BeanFactory 还能在实例...

    大厂真题之百度-Java中级

    BeanFactory 和 ApplicationContext 有什么区别 > BeanFactory 可以理解为含有 bean 集合的工厂类。BeanFactory 包含了种 bean 的定义, 以便在接收到客户端请求时将对应的 bean 实例化。 > BeanFactory 还能在实例...

    tiny-spring:tiny-spring是简化版的spring框架,能帮助您快速熟悉spring原型和掌握spring的核心原理。摘录了spring的核心逻辑,代码极度简化,保留spring的核心功能,如IoC和AOP,资源加载器,事件监听器,类型转换,容器扩展点,bean生命周期和作用域,应用某些等核心功能

    熊小泉 关于 tiny-spring是简化版的spring框架,能帮助您...定义一个简单的bean容器BeanFactory,内部包含一个地图可以保存bean,只有注册bean和获取bean两个方法 public class BeanFactory { private Map<String> bea

    Spring1.0-master.zip

    spring1.0.0源码,从中可以分析spring相关设计思想。工厂bean,beanFactory,APO,springmvc等

    Spring源码学习三:BeanFactory解析1

    BeanFactory是用于访问Spring Bean容器的根接口,是一个单纯的Bean工厂,也就是常说的IOC容器的顶层定义,各种IOC容器是在其基础上为了满

    Spring Bean 的生命周期.docx

    Spring的生命周期是指实例化Bean时所经历的一系列阶段,即通过getBean()获取bean对象及设置对象属性时,Spring框架做了哪些事。...本文分别对 BeanFactory 和 ApplicationContext 中的生命周期进行分析。

    Spring入门.docx

    所有在xml里配置的Bean标签最后都会转换为BeanDefinition对象存放在beanFactory里的beanDefinitionMap中。实例化完成的Bean对象存放在singletonObjects当中。 FileSystemXmlApplicationContext是加载磁盘里具体位置...

    深入解析Spring核心API: 打造高效Java应用

    本文深入探讨了Spring的核心API,包括BeanFactory、BeanDefinition以及事务管理等关键组件。 BeanFactory是Spring框架的心脏,作为Bean容器的根接口,它采用工厂模式来管理Bean的生命周期。BeanDefinition则详细描述...

    spring 容器.docx

    Spring有两个核心接口:BeanFactory和ApplicationContext,其中ApplicationContext是BeanFactory的子接口。他们都可代表Spring容器,Spring容器是生成Bean实例的工厂,并且管理容器中的Bean。 Bean是Spring管理的...

    spring bean的源码

    Spring 大量引入了Java 的Reflection机制,通过动态调用的方式避免硬编码方式的约束,并在此基础上建立了其核心组件BeanFactory,以此作为其依赖注入机制的实现基础。org.springframework.beans包中包括了这些核心...

    spring源码解决

    //这里根据bean的名字和Class类型来得到bean实例,和上面的方法不同在于它会抛出异常:如果根据名字取得的bean实例的Class类型和需要 Object getBean(String name, Class requiredType) throws BeansException; //...

    Spring启动流程.java

    AbstractApplicationContext.refresh(){ 1.为刷新准备此上下文 prepareRefresh(){ ...配置工厂的标准上下文特征,例如上下文的类加载器和后置处理器。 prepareBeanFactory(beanFactory){ . . .

    spring学习资料

    10. //这里根据bean的名字和Class类型来得到bean实例,和上面的方法不同在于它会抛出异常:如果根据名字取得的bean实例的Class类型和需要的不同的话。 11. Object getBean(String name, Class requiredType) ...

    spring第二天.pdf

    搞清楚BeanFactory家族的接口和类的作用 2. 搞清楚ApplicationContext家族的接口和类的作用 3. 搞清楚BeanDefinitionRegistry和SingletonBeanRegistry的作用 4. 搞清楚注册BeanDefinition流程中各个类的作用 5. 搞...

    Spring in Action(第2版)中文版

    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...

Global site tag (gtag.js) - Google Analytics