1 使用构造器初始化
‘当使用构造器方式创建一个Bean的时候,所有正常的类是可用的和与Spring兼容的。即,正在开发的类不需要实现任何特殊的接口或者以一种特殊的方式编码。简单的指定bean类是正常的饿。然而,依赖使用哪种类型的IoC容器,你可能需要一个默认的(空的)构造器。
Spring IoC容器可以管理你想管理的任何类;其不受限制的管理真正的JavaBeans。大多数Spring的使用者喜欢使用带有默认构造器的真正的JavaBeans和容器内属性后合适的getter和setter建模。你也可以在容器内有更多独特的非bean类型的类。例如,你需要使用一个连接池,其绝对不遵循JavaBean规范,Spring也能管理它。
基于XML的元配置,你可以按如下配置:
<bean id="exampleBean" class="examples.ExampleBean"/>
<bean name="anotherExample" class="examples.ExampleBeanTwo"/>
2 实例化使用静态工厂方法
当使用静态工厂方法定义一个bean时,你使用class属性指定包含了static工厂方法的类和一个叫做factory-method的属性指定工厂方法自身的名字。你应该能调用这个方法(带有可选的参数)并返回一个活性对象,其与通过一个构造器实例的方式差不多一样。使用这样的bean定义就是在传统编码中调用static工厂。
下面的bean定义指明了通过调用一个factory-method创建了bean。定义不指定返回对象的类型(类),仅仅是包含了工厂方法的类。在这个例子中,createInstance()
方法必须是一个static方法。
<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 使用一个实例工厂方法实例化
与通过静态工厂方法实例化类似,使用一个实例工厂方法的实例化调用了来自容器的一个已经存在的bean的非静态方法来创建一个新的bean。为使用这个机制,使class属性为空,并且在factory-bean属性中,指定当前容器bean的名字,包含了要调用来创建对象的实例方法。使用factory-method属性的设置工厂方法名。
<!-- 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;
}
}
一个工厂方法也可以持有更多的工厂方法:
<bean id="serviceLocator" class="examples.DefaultServiceLocator">
<!-- inject any dependencies required by this locator bean -->
</bean>
<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;
}
}
这个方式显示了工厂bean自身可以通过依赖注入管理和配置。