一.最常见,也是缺省,是调用spring的缺省工厂类
spring缺省工厂类:org.springframework.beans.factory.support.DefaultListableBeanFactory使用其静态方法preInstantiateSingletons()
配置文件中最普通最基本的定义一个普通bean
<bean id="DvdTypeDAOBean" class="com.machome.dvd.impl.DvdTypeDAO" ></bean>二.使用用户自定义的工厂类的静态方法进行创建
定义工厂类,返回new实例
public class DvdTypeDAOFactory { public static DvdTypeDAO getInstance(){ return new DvdTypeDAO(); }}这里只是简单的定义了一个工厂类,你可以定义更复杂的:比如单例类(提高利用效率)比如含有ThreadLocal属性的类(多线程下解决线程安全问题)spring配置文件中, bean的class不设要new的类,而是设成工厂类,然后后面加factory-method属性
<bean id="DvdTypeDAOBean" class="com.machome.core.impl.DvdTypeDAOFactory" factory-method="getInstance" />三.在spring中建立工厂类的Bean,然后调用该工厂bean建立真正的bean
public class DvdTypeDAOFactory { public DvdTypeDAO getInstance(){ return new DvdTypeDAO(); }}
spring配置文件中
<bean id="DvdTypeDAOFactoryBean" class="com.machome.core.impl.DvdTypeDAOFactory" />这个工厂bean还是被spring的DefaultListableBeanFactory. preInstantiateSingletons创建<bean id="DvdTypeDAOBean" factory-bean="DvdTypeDAOFactoryBean" factory-method="getInstance" />