Spring中的BeanFactory定义Bean

开发 后端
本文介绍Spring中的BeanFactory,以及XmlBeanFactory中的Bean定义包括的内容等。

Spring的依赖注入容器的核心是Bean工厂。Bean工厂负责管理组件和它们之间的依赖关系。一般说来,你的Beans应该遵守JavaBeans 规范,但是这不是必须的,如果使用构造器依赖注入来连接的Beans的时候,就没有遵守Beans规范(Beans规范中的javabean构造函数没有参数)。

一个BeanFactory可以用接口org.springframework.beans.factory.BeanFactory表示, 这个接口有多个实现。最常使用的的简单的beanFactory实现是 org.springframework.beans.factory.xml.XmlBeanFactory。

如果通过配置文件来完成配置,在内部是通过实现了BeanDefinition接口的类的实例来表现的。Bean的配置不仅存储着关于ean自己的信息,同时还有其依赖的beans的信息。对于任何实现了beanDefinitionRegistry接口的BeanFactory类,从配置文件中读取BeanFactory定义Bean(BeanDefinition)数据,既可以通过PropertiesBeanDefinitionReader(基于.properties文件)也可以通过XMLBeanDefinitionReader(基于XML文件)。

XmlBeanFactory派生于DefaultListableBanFactory并且简单的扩展了它,使它能够通过XmlBeanDefinitionReader自动获取配置信息。用户不需要实例化BeanFactory,因为Spring框架代码会做这件事。

一个XmlBeanFactory定义Bean的内容有:
classname:这通常是bean的真正的实现类。但是如果一个bean使用一个静态工厂方法所创建而不是被普通的构造函数创建,那么这实际上就是工厂类的classname bean行为配置元素:它声明这个bean在容器的行为方式(比如prototype或singleton,自动装配模式,依赖检查模式,初始化和析构方法)。

BeanFactory调用某个类的静态的工厂方法来创建bean,class属性指定了实际包含静态工厂方法的那个类。有以下3个途径创建bean:
1.通过构造函数创建bean
2.通过静态工厂方法创建Bean
3.通过实例工厂方法创建bean

每一个bean都有一个或多个id(也叫作标志符,或名字;这些名词说的是一回事)。这些id在管理bean的BeanFactory或 ApplicationContext中必须是唯一的。一个bean一般只有一个id,但是如果一个bean有超过一个的id,那么另外的可以认为是别名。

BeanFactory定义Beans为两种部署模式中的一种:singleton或prototype。如果一个bean是singleton形态的,那么就只有一个共享的实例存在, 所有和这个bean定义的id符合的bean请求都会返回这个唯一的、特定的实例。如果bean以non-singleton,prototype模式部署的话,对这个bean的每次请求都会创建一个新的bean实例。这对于例如每个user需要一个独立的user对象这样的情况是非常理想的。

Beans 默认被部署为singleton模式,除非你指定。要记住把部署模式变为non-singletion(prototype)后,每一次对这个bean的请求都会导致一个新创建的bean,而这可能并不是你真正想要的。所以仅仅在绝对需要的时候才把模式改成prototype。(我仅在 ThrowawayController时使用过singleton="false)
反向控制/依赖注射存在两种主要的形式:

1.基于setter的依赖注射,是在调用无参的构造函数或无参的静态工厂方法实例化你的bean之后, 通过调用你的bean上的setter方法实现的。在BeanFactory定义Bean的使用基于setter方法的注射依赖的bean是真正的JavaBean。 Spring一般提倡使用基于setter方法的依赖注射,因为很多的构造函数参数将会是笨重的, 尤其在有些属性是可选的情况下。

2.基于构造函数的依赖注射,它是通过调用带有许多参数的构造方法实现的, 每个参数表示一个合作者或者属性。  虽然Spring一般提倡在大多数情况下使用基于setter的依赖注射, 但是Spring还是完全支持基于构造函数的依赖注射,因为你可能想要在那些只提供多参数构造函数并且没有setter方法的遗留的bean上使用Spring。另外对于比较简单的bean,使用构造函数方法以确保bean不会处于错误的状态。

【编辑推荐】

  1. Spring3.0将全面支持REST
  2. 专家Isvy谈Spring 3.0
  3. JSF与Spring的集成
  4. 详细介绍Spring事务管理
  5. Spring框架的事务管理应用分析
责任编辑:佚名 来源: csdn
相关推荐

2009-06-17 17:20:14

BeanFactorySpring

2023-07-06 14:24:23

Spring接口自定义

2024-02-23 10:33:34

SpringBean容器

2021-07-05 18:05:40

SpringBean方法

2011-03-18 09:27:00

Spring

2023-10-27 07:39:44

IOC容器Spring

2023-09-05 08:23:56

SpringScope方法

2023-01-13 07:41:20

BeanSpring容器

2011-04-02 15:25:41

Spring

2022-06-23 10:47:57

Spring容器工具

2023-09-28 08:15:05

SpringBean加载

2011-04-19 09:27:25

Spring

2022-07-20 07:45:52

POJOJavaSpring IoC

2024-01-23 08:47:13

BeanSpring加载方式

2022-03-14 08:54:42

SpringBean生命周期

2021-07-05 08:43:46

Spring Beanscope作用域

2022-05-27 08:25:55

容器Spring

2021-04-23 14:14:46

设计模式对象

2023-07-26 00:43:31

2022-09-05 07:06:59

BeanSpring
点赞
收藏

51CTO技术栈公众号