一 . 概述
在前面,我们对IOC容器有了一定的认识,我们知道IOC容器的一个核心的任务就是创建Bean.
之前,我们还说到Bean的创建唯一方式就是通过构造函数.但是在此还有一个特殊的情况,就是工厂.
二 .工厂模式
在设计模式之中,工厂方法的核心就是创建对象,因此很多API都是遵守这个规则,将Bean创建的细节封装起来,
然后提供了一个工厂专门来创建Bean.
一般情况下,传统的工厂分成静态工厂和动态工厂(现在我们不需要再自己编写这样的工厂类了).
三. 使用静态工厂创建Bean
public class Factory { public static Date getDate() { return new Date(); } }
我们创建了一个静态工厂,调用getDate()方法就创建了一个Date对象.
<bean id="date" class="com.trek.factory.Factory" factory-method="getDate"></bean>
我们将静态工厂的信息配置在配置文件之中.
测试代码 :
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); Date date = (Date) context.getBean("date"); System.out.println(date);
现在我们一样可以在IOC容器之中获取Bean.
四 .使用动态工厂创建Bean
public class Factory { public Date getDate() { return new Date(); } }
我们创建了一个动态工厂,现在我们无法使用类名去创建一个对象方法了.
<bean id="factory" class="com.trek.factory.Factory"></bean> <bean id="date" factory-bean="factory" factory-method="getDate"></bean>
其实和之前一样,我们创建了一个工厂Bean,然后通过这个工厂Bean来完成Bean的创建.