3.3 概述
Table 3.1. The bean definition
Property | Explained 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; } }
Spring3.0官网文档学习笔记(五)--3.3,布布扣,bubuko.com