在讲诉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="静态方法">
扫描二维码关注公众号,回复:
1663287 查看本文章
工厂:
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>