我们知道
java.util.Calendar
类是一个抽象类,因此IOC Container无法创建此类的对象。因此,我们可以借助静态工厂方法实例化或实现 FactoryBean 接口,并覆盖3个方法 getObject(),getObjectType()和isSingleton() 。但是在Spring 2.0之前静态工厂方法实例化不可用。
现在我们将在创建java.util.Calendar
类的obejct时接受FactoryBean的帮助。
这是我的 CalendarFactoryBean 类
package com.fb.helper;
import java.util.Calendar;
import org.springframework.beans.factory.FactoryBean;
public class CalenderFactoryBean implements FactoryBean{
@Override
public Class getObjectType() {
System.out.println("getObjecType method called");
return Calendar.class;
}
@Override
public Object getObject() throws Exception {
Calendar calendar=Calendar.getInstance();
System.out.println("getObject method called");
return calendar;
}
@Override
public boolean isSingleton() {
System.out.println("isSingleton method called");
return true;
}
}
这是我的
application-context.xml
文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="calendar" class="com.fb.helper.CalenderFactoryBean"/>
</beans>
这是我的
Test.java
班级
package com.fb.test;
import java.util.Calendar;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
public class Test {
public static void main(String[] args) {
BeanFactory beanFactory=new XmlBeanFactory(new ClassPathResource("com/fb/common/application-context.xml"));
Calendar calendar=beanFactory.getBean("calendar",Calendar.class);
System.out.println(calendar);
}
}
最后这是输出 Click here to see the Output Image
现在,我的问题是为什么IOC容器不调用FactoryBean的getObjectType()方法???