一.最常见,也是缺省,是调用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" />