在讲诉bean的实例化方式之前,先了解下Spring框架的核心api:
BeanFactory:这是一个工厂,用于生成任意的bean。采取延迟加载,第一次getBean的时候才会初始化Bean。
ApplicationContext:是BeanFactory的子接口,功能更强大。(国际化处理、事件传递、Bean自动装配、各种不同应用层的Context的实现)。当配置文件被加载时,就进行对象实例化。
ClassPathXmlApplicationContext:用于加载classpath(类路径、src)下的xml。
FileSystemXmlApplicationContext:用于加载指定盘符下的xml
下面开始讲解bean的三种实例化方式:默认构造、静态工厂、实例工厂。
第一种:默认构造
<bean id="" class=""> 必须提供默认构造
第二种:静态工厂
静态工厂:用于生成实例对象,所有的方法必须是static
<bean id="" class="工厂全限定类名" factory-method="静态方法">
工厂:
public class MyBeanFactory {
//创建实例
public static UserService createService(){
return new UserServiceImpl();
}
}
Spring配置文件:
<!-- 将静态工厂创建的实例交予spring
class 确定静态工厂全限定类名
factory-method 确定静态方法名
-->
<bean id="userServiceId" class="com.zju.static_factory.MyBeanFactory" factory-method="createService"></bean>
第三种:实例工厂
实例工厂:必须先有工厂实例对象,通过实例对象再创建对象。提供所有的方法都是“非静态”的。
//实例工厂,所有的方法都是非静态的
public class MyBeanFactory {
//创建实例
public UserService createService(){
return new UserServiceImpl();
}
}
Spring配置文件:
<!-- 创建工厂实例 -->
<bean id="myBeanFactoryId" class="com.zju.factory.MyBeanFactory"></bean>
<!-- 获得userservice
* factory-bean 确定工厂实例
* factory-method 确定普通方法
-->
<bean id="userServiceId" factory-bean="myBeanFactoryId" factory-method="createService"></bean>