Spring Bean介绍

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;
    }
}
发布了42 篇原创文章 · 获赞 10 · 访问量 12万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章