Spring Bean介绍
一个Spring IoC容器管理一个或者多个beans。这些beans依据你填充在容器中的元数据配置创建,如以XML中的
Bean命名
每个bean都有一个或者多个标识符,这些标识符在容器中都必须是惟一的。通学一个bean仅有一个标识符,但是如果需要多个,其他的则可以使用别名(aliases)。
在基于XML的元数据配置,你可以使用id或者name属性来指定bean的标识符。id属性只允许明确的指定一个bean标识符,如果想要给bean指定多个别名,则可以在name属性中指定他们,以逗号或者分号或者空格分隔。如果ID和name不指定,则容器自动生成。
同进还可以在bean定义之外给bean起别名,如下:
<alias name="fromName" alias="toName"/>
实例化beans
一个bean定义本质上是创建一个或者多个对象的图谱,当请求bean实例时容器查找对应名字的bean定义,依据bean定义组装或者创建一个真正的对象。
如果使用的是基于XML的配置,你可以通过bean标签的class属性指定bean定义所要初始化的对象类型(type或者class),此class属性在BeanDefinition实例内部是一个Class类型的属性,是必须指定的。
普通bean实例化
对于一般的bean,如下定义即可正常初始化:
<bean id="exampleBean" class="examples.ExampleBean"/>
<bean name="anotherExample" class="Examples.ExampleBeanTwo"/>
通过静态工厂方法实例化bean
当定义一个由静态工厂方法创建的bean定义时,你需要给bean标签的class属性指定含有静态工厂方法的类的类名,同时给bean标签的factory-method属性指定创建实例所用的方法(必须为静态方法)。如下是通过createInstance方法实例化一个对象:
<bean id="clientService" class="examples.ClientService" factory-method="createInstance"/>
对应工厂如下:
public class ClientService{
private static ClientService clientService = new ClientService();
private ClientService(){}
public static ClientService createInstance(){
return clientService;
}
}
通过实例工厂方法实例化Bean
同静态工厂方法类似,不同之处再于实例化工厂方法时需先定义工厂的初始化定义,然后定义需要创建bean的定义如下:
<!-- 工厂定义 -->
<bean id="serviceLocator" class="examples.DefaultServiceLocator"/>
<bean id="clientService" factory-bean="serviceLocator" factory-method="createClientServiceInstance"/>
<bean id="accountService" factory-bean="serviceLocator" factory-method="createAccountServiceInstance"/>
对应工厂如下:
public class DefaultServiceLocator{
private static ClientService clientService = new ClientServiceImpl();
private static AccountService accountService = new AccountServiceImpl();
private DefaultServiceLocator(){}
public ClientService createClientServiceInstance(){
return clientService;
}
public AccountService createAccountServiceInstance(){
return accountService;
}
}