首页 > 代码库 > Spring3.0官网文档学习笔记(五)--3.3

Spring3.0官网文档学习笔记(五)--3.3

3.3 概述

Table 3.1. The bean definition

PropertyExplained in...
class

Section 3.3.2, “Instantiating beans”

name

Section 3.3.1, “Naming beans”

scope

Section 3.5, “Bean scopes”

constructor arguments

Section 3.4.1, “Dependency injection”

properties

Section 3.4.1, “Dependency injection”

autowiring mode

Section 3.4.5, “Autowiring collaborators”

lazy-initialization mode

Section 3.4.4, “Lazy-initialized beans”

initialization method

Section 3.6.1.1, “Initialization callbacks”

destruction method

Section 3.6.1.2, “Destruction callbacks”

    除了xml配置文件,ApplicationContext的实现类还允许在容器外注册已经存在的对象:通过getBeanFactory()方法获得DefaultListableBeanFactory。    DefaultListableBeanFactory支持通过registerSingleton(..)和registerBeanDefinition(..)来实现。

3.3.1 命名beans
    一个bean通常只有一个标示符(id),但是可以拥有多个别名(name)。可以通过使用“,”、“;”、“ ”来为name定义多个别名。
    bean不一定要有一个name或者一个id,如果都没有配置的话,spring默认为这个bean生成一个唯一的名字。但是如果要通过ref属性或Service Location来引用的话,必须提供一个名字。什么都不配置的情况通常是用在inner beans和autowiring collaborators。
3.3.1.1 bean定义之外的别名
    通过<alias/>标签可以为同一个bean定义不同的别名

<alias name="subsystemA-dataSource" alias="subsystemB-dataSource"/>
<alias name="subsystemA-dataSource" alias="myApp-dataSource" />
3.3.2 实例化beans
    实例化beans有两种方法:
    1、在class属性配置类,相当于使用new去实例化;
    2、使用工厂创建
3.3.2.1 用构造器初始化
    必须拥有一个默认的构造器(有配置构造器参数的除外)
    内部类的class:com.example.Foo有个内部类Bar,那么Bar的对应的class属性配置为com.example.Foo$Bar
3.3.2.2 使用静态工厂方法初始化

<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;
  }
}
3.3.2.3 通过实例化一个工厂方法来初始化
    
<!-- the factory bean, which contains a method called createInstance() -->
<bean id="serviceLocator" class="examples.DefaultServiceLocator">
  <!-- inject any dependencies required by this locator bean -->
</bean>

<!-- the bean to be created via the factory bean -->
<bean id="clientService"
      factory-bean="serviceLocator"
      factory-method="createClientServiceInstance"/>
public class DefaultServiceLocator {
  private static ClientService clientService = new ClientServiceImpl();
  private DefaultServiceLocator() {}

  public ClientService createClientServiceInstance() {
    return clientService;
  }
}