Bean总览

Spring框架内各种组件的表示方式

在容器里面,bean定义表示为BeanDefinition对象,包含下列元数据:

一个含有包全称的类名,通常是Bean的实现类。
bean行为配置元素,表示bean在容器里面的行为(作用域、生命周期等)。
对会用到的别的bean的引用,也称作合作者或依赖。
别的配置设置,用于新创建的对象,像连接池的大小、最大连接数等。

bean定义属性:

Class
Name
Scope
Constructor arguments
Properties
Autowiring mode
Lazy initialization mode
Initialization method
Destruction method

Bean命名:

在基于xml的配置元数据里,可以使用id或name属性来声明bean标识符。

id属性只能声明一个,不可同名。

name可用于声明bean的别名,可以通过分号、逗号或空格来声明多个值。

id和name不强制要求提供,如果不提供,容器就生成一个不会重复的名字给这个bean。

如果想通过name属性参考别的bean,可以使用ref元素。此时被ref的bean必须提供一个name属性。

bean名称以小写字母开头的驼峰命名法字符串组成。统一命名惯例可以让代码更易读。
在bean定义外的别名,使用alias元素:

<beans>
<alias name="fromName" alias="toName"/>
</beans>

实例化Bean:

bean元素的class属性,

可以通过两种方法中的一种使用class属性:

容器通过反射调用bean的构造器实例化,等价于new操作符;
比较少用的例子是容器可以调用类的静态工厂方法来生成bean;

嵌套类名:通过美元符号($)或者点号(.)来分隔。

通过构造器实例化(默认构造器):

<bean id="exampleBean" class="examples.ExampleBean"/>
<bean name="anotherExample" class="examples.ExampleBeanTwo"/>

通过类的静态工厂方法实例化:

<bean id="clientService"
    class="examples.ClientService"
    factory-method="createInstance"/>

通过一个名叫factory-method的属性来声明工厂方法。

通过别的bean实例的工厂方法:

<bean id="serviceLocator" class="examples.DefaultServiceLocator"/>
<!-- 使用serviceLocator的方法创建的bean -->
<bean id="clientService"
    factory-bean="serviceLocator"
    factory-method="createClientServiceInstance"/>

使用已经实例化的bean的非静态方法创建一个bean,只要将class属性留空,然后factory-bean和factory-method就可自动调用。

在Spring文档里,factory bean意思是一种bean,通过实例或者静态方法创建对象。
FactoryBean则是实现了FactoryBean接口的bean。

确定bean的运行时类型:

建议通过BeanFactory.getType()调用来确定。

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注