为什么IOC容器不调用FactoryBean的getObjectType()方法

时间:2018-05-07 05:05:34

标签: java spring

  

我们知道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()方法???

0 个答案:

没有答案