Example usage for org.springframework.beans.factory FactoryBean getObjectType

List of usage examples for org.springframework.beans.factory FactoryBean getObjectType

Introduction

In this page you can find the example usage for org.springframework.beans.factory FactoryBean getObjectType.

Prototype

@Nullable
Class<?> getObjectType();

Source Link

Document

Return the type of object that this FactoryBean creates, or null if not known in advance.

Usage

From source file:com.otterca.common.crypto.X509CertificateBuilderFactoryTest.java

/**
 * Test factory bean./*from w w  w. ja v a  2 s.  co m*/
 * 
 * @throws Exception
 */
@Test
public void testFactory() throws Exception {
    FactoryBean<X509CertificateBuilder> factory = new X509CertificateBuilderFactory();

    assertEquals(factory.getObjectType(), X509CertificateBuilder.class);
    assertFalse(factory.isSingleton());

    Object obj = factory.getObject();
    assertTrue(obj instanceof X509CertificateBuilder);
}

From source file:org.springframework.beans.factory.support.AbstractBeanFactory.java

public Class getType(String name) throws NoSuchBeanDefinitionException {
    String beanName = transformedBeanName(name);
    try {//  w  w w .  j a  v a  2 s . c  o  m
        Class beanClass = null;

        // Check manually registered singletons.
        Object beanInstance = null;
        synchronized (this.singletonCache) {
            beanInstance = this.singletonCache.get(beanName);
        }
        if (beanInstance != null) {
            beanClass = beanInstance.getClass();
        }

        else {
            // No singleton instance found -> check bean definition.
            if (getParentBeanFactory() != null && !containsBeanDefinition(beanName)) {
                // No bean definition found in this factory -> delegate to parent.
                return getParentBeanFactory().getType(name);
            }

            RootBeanDefinition mergedBeanDefinition = getMergedBeanDefinition(beanName, false);

            // Delegate to getTypeForFactoryMethod in case of factory method.
            if (mergedBeanDefinition.getFactoryMethodName() != null) {
                return getTypeForFactoryMethod(name, mergedBeanDefinition);
            }
            // Return "undeterminable" for beans without class.
            if (!mergedBeanDefinition.hasBeanClass()) {
                return null;
            }

            beanClass = mergedBeanDefinition.getBeanClass();
        }

        // Check bean class whether we're dealing with a FactoryBean.
        if (FactoryBean.class.isAssignableFrom(beanClass) && !isFactoryDereference(name)) {
            // If it's a FactoryBean, we want to look at what it creates, not the factory class.
            FactoryBean factoryBean = (FactoryBean) getBean(FACTORY_BEAN_PREFIX + beanName);
            return factoryBean.getObjectType();
        }
        return beanClass;
    }

    catch (BeanCreationException ex) {
        if (ex.contains(BeanCurrentlyInCreationException.class)
                || ex.contains(FactoryBeanNotInitializedException.class)) {
            // Can only happen when checking a FactoryBean.
            logger.debug("Ignoring BeanCreationException on FactoryBean type check", ex);
            return null;
        }
        throw ex;
    }
}