一.静态工厂:
说明:工厂方法为static,直接生产对象实例 <!-- 静态化工厂的配置 -->
a.新建一个工厂类StaticFactoryDemo,维护一个获取日期对象的方法getCalendar
package com.jorian.demo;
import java.util.Calendar;
public class StaticFactoryDemo {
public static Calendar getCalender(){
return Calendar.getInstance();
}
}
b.配置spring-factory.xml文件
<!-- 静态化工厂的配置 -->
<bean id="calendar1" class="com.jorian.demo.StaticFactoryDemo" factory-method="getCalender"/>
c.新建测试类:
package com.jorian.test;
import java.util.Calendar;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class testfactory {
@Test
public void test05(){
ApplicationContext app=new ClassPathXmlApplicationContext("/spring/factory.xml");
//通过spring直接getBean
Calendar a=(Calendar) app.getBean("calendar1");
System.out.println("calendar1-----"+a);
}
}
二,实例化工厂
说明:实例化工厂中的工厂方法是非静态的,需要先实例化工厂,在实例化对象
a.新建实例化工厂InstanceFactoryDemo
package com.jorian.demo;
import java.util.Calendar;
public class InstanceFactoryDemo {
public Calendar getCalendar(){
return Calendar.getInstance();
}
}
b.配置pring-factory.xml文件
<!--实例化工厂配置 -->
<bean id="factory" class="com.jorian.demo.InstanceFactoryDemo"/>
<bean id="calendar2" factory-bean="factory" factory-method="getCalendar"/>
c.新建测试类
package com.jorian.test;
import java.util.Calendar;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class testfactory {
@Test
public void test05(){
ApplicationContext app=new ClassPathXmlApplicationContext("/spring/factory.xml");
Calendar b=(Calendar) app.getBean("calendar2");
System.out.println("calendar1-----"+b);
}
}
三,Spring工厂
扫描二维码关注公众号,回复:
2345861 查看本文章
a.新建spring工厂类
package com.jorian.demo;
import java.util.Calendar;
import org.springframework.beans.factory.FactoryBean;
public class SpringFactory implements FactoryBean<Calendar>{
@Override
public Calendar getObject() throws Exception {
// spring工厂返回一个实例
return Calendar.getInstance();
}
@Override
public Class<?> getObjectType() {
// 类型
return Calendar.class;
}
@Override
public boolean isSingleton() {
// 是否单例
return false;
}
}
b.配置spring-factory.xml文件
<!-- Spring工厂配置 -->
<bean id="calendar3" class="com.jorian.demo.SpringFactory"/>
c.新建Spring工厂测试类
package com.jorian.test;
import java.util.Calendar;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class testfactory {
@Test
public void test05(){
ApplicationContext app=new ClassPathXmlApplicationContext("/spring/factory.xml");
Calendar a=(Calendar) app.getBean("calendar1");
System.out.println("calendar1-----"+a);
Calendar b=(Calendar) app.getBean("calendar2");
System.out.println("calendar1-----"+b);
Calendar c=(Calendar) app.getBean("calendar3");
System.out.println("calendar1-----"+c);
}}
如果测试类都能运行出日期,则正确: