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