1. 创建实例对象的方式
我们在手动创建一个类的实例对象时,可以大致有以下几种方式:
- 通过无参构造函数
- 通过有参构造函数
- 通过静态工厂方法
- 通过实例(非静态)工厂方法
同理,在交由spring IOC创建实例对象也有以上几种方式,这里先总结了无参、静态工厂和实例工厂三种情况的XML配置文件书写方式。
2.基于无参构造函数
spring可以通过无参构造函数来创建一个bean(组件对象),我们只需要通过XML配置文件指定Bean类信息即可。
XML配置文件:
XML
<bean id="empService" class="org.kkk.spring.ioc.EmpService" />
注意:
- id:组件的唯一标识,方便后期读取
- class:组件类的全路径
- 如果将同一个类声明两个组件信息,即写两个bean(id不同,class相同),会实例化两个组件对象
3. 基于静态工厂方法
例如,当前存在以下组件类:
java
public class ClientService {
private static ClientService clientService = new ClientService();
private ClientService() {}
public static ClientService getInstance() {
return clientService;
}
}
现在若要通过IOC创建实例,那么配置文件如下:
XML
<bean id="clientService" class="org.kkk.spring.ioc.ClientService" factory-method="getInstance" />
注意:
- id:组件的唯一标识
- class:组件类的全类名
- factory-method:静态工厂的静态方法名
4. 基于实例工厂方法
例如,当前存在以下组件类:
java
public class ClientServiceFactory {
private static ClientService clientService = new ClientService();
public ClientService getInstance() {
return clientService;
}
}
可以看到,当前类的getInstance方法与3不同,此处时非静态方法。那么,想要得到实例化对象clientService ,就只能先创建工厂实例,之后工厂实例对象再调用该非静态方法得到目标对象。
XML配置文件如下:
XML
<!--1. 配置工厂类的组件信息 -->
<bean id="clientServiceFactory" class="org.kkk.spring.ioc.ClientServiceFactory" />
<!--2. 通过指定非静态工厂对象和方法名 来配置生成的ioc信息 -->
<bean id="clientService" factory-bean="clientServiceFactory" factory-method="getInstance" />
注意:
- id:组件的唯一标识
- factory-bean:指定当前容器中工厂Bean 的名称
- factory-method: 指定实例工厂的非静态方法名
可以看到,XML配置文件也输入了两个组件信息,与我们手动创建类似,需要首先创建工厂实例。