例子:以获取当前时间 Calendar对象为例
一.静态工厂
核心:通过静态方法实例化对象
1创建一个StaticFactory类
public class StaticFactory {
public static Calendar getInstance() {
return Calendar.getInstance();
}
}
2配置xml文件
<!--Spring中静态工厂
spring解析方式:
1.当spring容器加载bean标签时,这时实例化对象
2.spring容器加载工厂类.通过factory-method中标识的方法
实例化对象.
3.spring将id和对象进行保存.方便对象获取.
-->
<!-- 静态工厂 -->
<bean id="calendar1" class="com.jt.manage.factory.StaticFactory" factory-method="getInstance"/>
3测试是否实现
@Test
public void testStaticFactory(){
ApplicationContext context =
new ClassPathXmlApplicationContext("/spring/factory.xml");
Calendar calendar = (Calendar) context.getBean("calendar1");
System.out.println("获取时间:"+calendar.getTime());
}
二.实例化工厂
核心:通过对象.方法创建对象
1创建一个InstanceFactory类
public class InstanceFactory {
public Calendar getInstance() {
return Calendar.getInstance();
}
}
2配置xml文件
<bean id="instanceFactory" class="com.jt.manage.factory.InstanceFactory"/>
<bean id="calendar2" factory-bean="instanceFactory" factory-method="getInstance"/>
3测试是否实现
@Test
public void testInstanceFactory() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("/spring/factory.xml");
Calendar calendar = (Calendar) context.getBean(“calendar2”);
System.out.println(“当前时间:”+calendar.getTime());
}
三.Spring工厂模式
核心:通过实现特定的接口,之后回调实例化对象
1创建一个SpringFactory类
public class SpringFactory implements FactoryBean{
@Override
public Calendar getObject() throws Exception {
return Calendar.getInstance();
}
@Override
public Class<?> getObjectType() {
return Calendar.class;
}
@Override
public boolean isSingleton() {
return false;
}
}
2配置xml文件
<!-- spring工厂 -->
<bean id="calendar3" class="com.jt.manage.factory.SpringFactory"/>
3测试是否实现
@Test
public void testSpringFactory() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("/spring/factory.xml");
Calendar calendar = (Calendar) context.getBean("calendar3");
System.out.println("当前时间:"+calendar.getTime());
}