Example usage for org.springframework.beans.factory.support RootBeanDefinition setConstructorArgumentValues

List of usage examples for org.springframework.beans.factory.support RootBeanDefinition setConstructorArgumentValues

Introduction

In this page you can find the example usage for org.springframework.beans.factory.support RootBeanDefinition setConstructorArgumentValues.

Prototype

public void setConstructorArgumentValues(ConstructorArgumentValues constructorArgumentValues) 

Source Link

Document

Specify constructor argument values for this bean.

Usage

From source file:org.jsr107.ri.annotations.spring.config.AnnotationDrivenJCacheBeanDefinitionParser.java

/**
 * Create {@link org.aopalliance.intercept.MethodInterceptor} that is applies the caching logic to advised methods.
 *
 * @return Reference to the {@link org.aopalliance.intercept.MethodInterceptor}. Should never be null.
 *//*from  www .ja v  a2  s.  c o m*/
protected RuntimeBeanReference setupInterceptor(Class<? extends AbstractCacheInterceptor<?>> interceptorClass,
        ParserContext parserContext, Object elementSource,
        RuntimeBeanReference cacheOperationSourceRuntimeReference) {

    final RootBeanDefinition interceptor = new RootBeanDefinition(interceptorClass);
    interceptor.setSource(elementSource);
    interceptor.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);

    final ConstructorArgumentValues constructorArgumentValues = new ConstructorArgumentValues();
    constructorArgumentValues.addIndexedArgumentValue(0, cacheOperationSourceRuntimeReference);
    interceptor.setConstructorArgumentValues(constructorArgumentValues);

    final XmlReaderContext readerContext = parserContext.getReaderContext();
    final String interceptorBeanName = readerContext.registerWithGeneratedName(interceptor);
    return new RuntimeBeanReference(interceptorBeanName);
}

From source file:org.atomserver.utils.test.TestingAtomServer.java

private Server createServer(int port, String atomserverServletContext) {
    // set up the server and the atomserver web application context
    Server server = new Server(port);
    Context context = new Context(server, "/" + atomserverServletContext, true /*sessions*/,
            false /*no security*/);

    // we need to hard-code certain system properties to get the behavior we want here - we
    // will re-set them when we're done
    Properties properties = (Properties) System.getProperties().clone();
    System.setProperty("atomserver.env", "asdev-hsql-mem");
    System.setProperty("atomserver.servlet.context", atomserverServletContext);

    // TODO: this should be removed
    System.setProperty("atomserver.servlet.mapping", "v1");

    // our Spring application context will start off by loading the basic built-in bean
    // definitions
    appContext = new GenericWebApplicationContext();

    XmlBeanDefinitionReader xmlReader = new XmlBeanDefinitionReader(appContext);
    xmlReader.loadBeanDefinitions(new ClassPathResource("org/atomserver/spring/propertyConfigurerBeans.xml"));
    xmlReader.loadBeanDefinitions(new ClassPathResource("org/atomserver/spring/databaseBeans.xml"));
    xmlReader.loadBeanDefinitions(new ClassPathResource("org/atomserver/spring/logBeans.xml"));
    xmlReader.loadBeanDefinitions(new ClassPathResource("org/atomserver/spring/storageBeans.xml"));
    xmlReader.loadBeanDefinitions(new ClassPathResource("org/atomserver/spring/abderaBeans.xml"));

    // if we were given a Spring config location, we use that -- otherwise we configure the
    // workspaces that were set up through the API
    if (springBeansLocation != null) {
        xmlReader.loadBeanDefinitions(new ClassPathResource(springBeansLocation));
    } else {//from ww w.j  av  a 2s  .  co m
        RootBeanDefinition workspaces = new RootBeanDefinition(HashSet.class);
        ConstructorArgumentValues constructorArgumentValues = new ConstructorArgumentValues();
        constructorArgumentValues.addGenericArgumentValue(workspaceSet);
        workspaces.setConstructorArgumentValues(constructorArgumentValues);

        appContext.registerBeanDefinition("org.atomserver-workspaces", workspaces);
    }

    // override the base content storage to use DB-based storage
    RootBeanDefinition storage = new RootBeanDefinition(DBBasedContentStorage.class);
    MutablePropertyValues propertyValues = new MutablePropertyValues();
    propertyValues.addPropertyValue("contentDAO", new RuntimeBeanReference("org.atomserver-contentDAO"));
    propertyValues.addPropertyValue("entriesDAO", new RuntimeBeanReference("org.atomserver-entriesDAO"));
    storage.setPropertyValues(propertyValues);
    appContext.registerBeanDefinition("org.atomserver-contentStorage", storage);

    // clear the existing ENV
    ConfigurationAwareClassLoader.invalidateENV();

    // refresh the context to actually instantiate everything.
    appContext.refresh();

    // re-set the system properties
    System.setProperties(properties);

    // clear the update ENV
    ConfigurationAwareClassLoader.invalidateENV();

    // put our app context into the servlet context
    context.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, appContext);

    // load and init the service context for v1
    final ServiceContext serviceContext = (ServiceContext) appContext.getBean(ServiceContext.class.getName());
    serviceContext.init(new Abdera(), Collections.EMPTY_MAP);

    // create a new AtomServerServlet - but override the createServiceContext method
    AtomServerServlet servlet = new AtomServerServlet() {
        protected ServiceContext createServiceContext() {
            return serviceContext;
        }
    };

    // load and init the service context for v2
    final ServiceContext serviceContextV2 = (ServiceContext) appContext
            .getBean("org.atomserver-serviceContext.v2");
    serviceContextV2.init(new Abdera(), Collections.EMPTY_MAP);

    // create a new AtomServerServlet - but override the createServiceContext method
    AtomServerServlet servletV2 = new AtomServerServlet() {
        protected ServiceContext createServiceContext() {
            return serviceContextV2;
        }
    };

    // register the servlets
    context.addServlet(new ServletHolder(servlet), "/v1/*");
    context.addServlet(new ServletHolder(servletV2), "/v2/*");

    EntriesDAOiBatisImpl entriesDAO = (EntriesDAOiBatisImpl) appContext.getBean("org.atomserver-entriesDAO");
    entriesDAO.setUseWorkspaceCollectionCache(false);

    // ready to be started
    return server;
}

From source file:net.firejack.platform.model.config.hibernate.HibernateFactoryBean.java

private void buildHibernateTransactionManager() {
    for (Map.Entry<String, Database> entry : databases.entrySet()) {
        String name = entry.getKey();
        Database database = entry.getValue();

        BasicDataSource dataSource = null;
        try {/*from  w  w w .  ja  v a  2s.c o m*/
            dataSource = context.getBean(name + HIBERNATE_DATA_SOURCE_SUFFIX, BasicDataSource.class);
        } catch (BeansException e) {
            logger.info("Manual Hibernate DataSource: " + name + HIBERNATE_DATA_SOURCE_SUFFIX
                    + " not found use default");
        }

        if (dataSource == null) {
            dataSource = defaultHibernate.getBean(HIBERNATE_DEFAULT_PREFIX + HIBERNATE_DATA_SOURCE_SUFFIX,
                    BasicDataSource.class);
            dataSource.setDriverClassName(database.type.getDriver());
            dataSource.setUrl(database.getUrl());
            dataSource.setUsername(database.getUsername());
            dataSource.setPassword(database.getPassword());
            dataSource.setValidationQuery(database.getType().getValidate());

            context.getBeanFactory().registerSingleton(name + HIBERNATE_DATA_SOURCE_SUFFIX, dataSource);
        }

        Properties properties = null;
        try {
            properties = context.getBean(name + HIBERNATE_PROPERTIES_SUFFIX, Properties.class);
        } catch (BeansException e) {
            logger.info("Manual Hibernate properties: " + name + HIBERNATE_PROPERTIES_SUFFIX
                    + " not found use default");
        }

        if (properties == null) {
            properties = defaultHibernate.getBean(HIBERNATE_DEFAULT_PREFIX + HIBERNATE_PROPERTIES_SUFFIX,
                    Properties.class);
            properties.put(Environment.DIALECT, database.getType().getDialect());

            context.getBeanFactory().registerSingleton(name + HIBERNATE_PROPERTIES_SUFFIX, properties);
        }

        SessionFactory sessionFactory = null;
        try {
            sessionFactory = context.getBean(name + HIBERNATE_SESSION_FACTORY_SUFFIX, SessionFactory.class);
        } catch (BeansException e) {
            logger.info("Manual Hibernate Session Factory: " + name + HIBERNATE_SESSION_FACTORY_SUFFIX
                    + " not found use default");
        }

        if (sessionFactory == null) {
            try {
                AnnotationSessionFactoryBean annotationSessionFactoryBean = new AnnotationSessionFactoryBean();
                annotationSessionFactoryBean.setAnnotatedClasses(new Class[] { BaseEntityModel.class });
                annotationSessionFactoryBean.setDataSource(dataSource);
                annotationSessionFactoryBean.setHibernateProperties(properties);
                annotationSessionFactoryBean.setPackagesToScan(database.getScanPackages());
                annotationSessionFactoryBean.setNamingStrategy(new OpenFlameNamingStrategy(database.getType()));

                if (database.getType() == DatabaseName.MySQL || database.getType() == DatabaseName.MSSQL) {
                    annotationSessionFactoryBean.setLobHandler(new DefaultLobHandler());
                } else if (database.getType() == DatabaseName.Oracle) {
                    annotationSessionFactoryBean.setLobHandler(new OracleLobHandler());
                }

                disposableBeans.add(annotationSessionFactoryBean);
                annotationSessionFactoryBean.afterPropertiesSet();
                sessionFactory = annotationSessionFactoryBean.getObject();
            } catch (Exception e) {
                logger.error(e, e);
            }
        }

        HibernateTemplate template = new HibernateTemplate();
        template.setSessionFactory(sessionFactory);

        context.getBeanFactory().registerSingleton(name + HIBERNATE_TEMPLATE_PREFIX, template);
        database.setHibernateSupport(template);
        logger.info("Initialize Hibernate support for stories: " + database);

        String beanName = name + HIBERNATE_TRANSACTION_MANAGER_SUFFIX;

        ConstructorArgumentValues values = new ConstructorArgumentValues();
        values.addGenericArgumentValue(sessionFactory);

        RootBeanDefinition definition = new RootBeanDefinition(HibernateTransactionManager.class);
        definition.setConstructorArgumentValues(values);
        registers.put(beanName, definition);

        Collection<HibernateSupport> stores = database.getStores();
        for (HibernateSupport store : stores) {
            targets.put(((Advised) store).getTargetClass(), beanName);
        }
    }
}

From source file:net.firejack.platform.model.config.hibernate.HibernateFactoryBean.java

private void buildXAHibernateTransactionManager() {
    if (xaDatabases.size() == 0)
        return;//from w  w w  .j  a v a2s . c  om

    String beanName = XA + HIBERNATE_TRANSACTION_MANAGER_SUFFIX;

    for (Map.Entry<String, Database> entry : xaDatabases.entrySet()) {
        String name = entry.getKey();
        Database database = entry.getValue();

        AtomikosDataSourceBean dataSource = null;
        try {
            dataSource = context.getBean(name + HIBERNATE_DATA_SOURCE_SUFFIX, AtomikosDataSourceBean.class);
        } catch (BeansException e) {
            logger.info("Manual XA Hibernate DataSource: " + name + HIBERNATE_DATA_SOURCE_SUFFIX
                    + " not found use default");
        }

        if (dataSource == null) {
            try {
                dataSource = defaultHibernate.getBean(
                        HIBERNATE_DEFAULT_PREFIX + XA + HIBERNATE_DATA_SOURCE_SUFFIX,
                        AtomikosDataSourceBean.class);
                dataSource.setUniqueResourceName(name);
                dataSource.setXaDataSourceClassName(database.getType().getXads());
                dataSource.setTestQuery(database.getType().getValidate());
                Properties xaProperties = new Properties();
                xaProperties.put("URL", database.getUrl());
                xaProperties.put("user", database.getUsername());
                xaProperties.put("password", database.getPassword());
                if (database.getType() == DatabaseName.MySQL) {
                    xaProperties.put("pinGlobalTxToPhysicalConnection", true);
                }
                dataSource.setXaProperties(xaProperties);
                dataSource.init();

                context.getBeanFactory().registerSingleton(name + HIBERNATE_DATA_SOURCE_SUFFIX, dataSource);
            } catch (AtomikosSQLException e) {
                logger.error(e, e);
            }
        }

        Properties properties = null;
        try {
            properties = context.getBean(name + HIBERNATE_PROPERTIES_SUFFIX, Properties.class);
        } catch (BeansException e) {
            logger.info("Manual XA Hibernate properties: " + name + HIBERNATE_PROPERTIES_SUFFIX
                    + " not found use default");
        }

        if (properties == null) {
            properties = defaultHibernate.getBean(HIBERNATE_DEFAULT_PREFIX + HIBERNATE_PROPERTIES_SUFFIX,
                    Properties.class);
            properties.put(Environment.DIALECT, database.getType().getDialect());
            properties.put(Environment.TRANSACTION_STRATEGY, TRANSACTION_STRATEGY);
            properties.put(Environment.TRANSACTION_MANAGER_STRATEGY, TRANSACTION_MANAGER_STRATEGY);

            context.getBeanFactory().registerSingleton(name + HIBERNATE_PROPERTIES_SUFFIX, properties);
        }

        SessionFactory sessionFactory = null;
        try {
            sessionFactory = context.getBean(name + HIBERNATE_SESSION_FACTORY_SUFFIX, SessionFactory.class);
        } catch (BeansException e) {
            logger.info("Manual XA Hibernate Session Factory: " + name + HIBERNATE_SESSION_FACTORY_SUFFIX
                    + " not found use default");
        }

        if (sessionFactory == null) {
            try {
                AnnotationSessionFactoryBean annotationSessionFactoryBean = new AnnotationSessionFactoryBean();
                annotationSessionFactoryBean.setAnnotatedClasses(new Class[] { BaseEntityModel.class });
                annotationSessionFactoryBean.setDataSource(dataSource);
                annotationSessionFactoryBean.setHibernateProperties(properties);
                annotationSessionFactoryBean.setPackagesToScan(database.getScanPackages());
                annotationSessionFactoryBean.setNamingStrategy(new OpenFlameNamingStrategy(database.getType()));

                if (database.getType() == DatabaseName.MySQL || database.getType() == DatabaseName.MSSQL) {
                    annotationSessionFactoryBean.setLobHandler(new DefaultLobHandler());
                } else if (database.getType() == DatabaseName.Oracle) {
                    annotationSessionFactoryBean.setLobHandler(new OracleLobHandler());
                }

                disposableBeans.add(annotationSessionFactoryBean);
                annotationSessionFactoryBean.afterPropertiesSet();
                sessionFactory = annotationSessionFactoryBean.getObject();
            } catch (Exception e) {
                logger.error(e, e);
            }

            Collection<HibernateSupport> stores = database.getStores();
            for (HibernateSupport store : stores) {
                targets.put(((Advised) store).getTargetClass(), beanName);
            }
        }

        HibernateTemplate template = new HibernateTemplate();
        template.setSessionFactory(sessionFactory);

        context.getBeanFactory().registerSingleton(HIBERNATE_TEMPLATE_PREFIX + name, template);
        database.setHibernateSupport(template);
        logger.info("Initialize Hibernate :" + HIBERNATE_TEMPLATE_PREFIX + name + " for stories:" + database);
    }

    ConstructorArgumentValues values = new ConstructorArgumentValues();
    values.addGenericArgumentValue(new UserTransactionImp());
    values.addGenericArgumentValue(new UserTransactionManager());

    RootBeanDefinition definition = new RootBeanDefinition(JtaTransactionManager.class);
    definition.setConstructorArgumentValues(values);
    registers.put(beanName, definition);
}

From source file:org.jsr107.ri.annotations.spring.config.AnnotationDrivenJCacheBeanDefinitionParser.java

/**
 * Create the {@link RuntimeBeanReference} used to apply the caching interceptor
 *
 * @return Reference to the {@link RuntimeBeanReference}. Should never be null.
 *//*w  w w .j  a  v  a  2  s  .c  o m*/
protected RuntimeBeanReference setupPointcut(ParserContext parserContext, Object elementSource,
        RuntimeBeanReference cacheOperationSourceRuntimeReference,
        RuntimeBeanReference cacheInterceptorSourceRuntimeReference) {

    final RootBeanDefinition pointcut = new RootBeanDefinition(CacheStaticMethodMatcherPointcut.class);
    pointcut.setSource(elementSource);
    pointcut.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);

    final ConstructorArgumentValues constructorArgumentValues = new ConstructorArgumentValues();
    constructorArgumentValues.addIndexedArgumentValue(0, cacheOperationSourceRuntimeReference);
    constructorArgumentValues.addIndexedArgumentValue(1, cacheInterceptorSourceRuntimeReference);
    pointcut.setConstructorArgumentValues(constructorArgumentValues);

    final String pointcutBeanName = pointcut.getBeanClassName() + "_"
            + cacheInterceptorSourceRuntimeReference.getBeanName();

    final BeanDefinitionRegistry registry = parserContext.getRegistry();
    registry.registerBeanDefinition(pointcutBeanName, pointcut);

    return new RuntimeBeanReference(pointcutBeanName);
}

From source file:org.jsr107.ri.annotations.spring.config.AnnotationDrivenJCacheBeanDefinitionParser.java

/**
 * Create a {@link CacheContextSourceImpl} bean that will be used by the advisor and interceptor
 *
 * @return Reference to the {@link CacheContextSourceImpl}. Should never be null.
 *//*  w  w w  .ja  v  a  2  s  .  c om*/
protected RuntimeBeanReference setupCacheOperationSource(Element element, ParserContext parserContext,
        Object elementSource) {

    final RootBeanDefinition cacheAttributeSource = new RootBeanDefinition(CacheContextSourceImpl.class);
    cacheAttributeSource.setSource(elementSource);
    cacheAttributeSource.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);

    final RootBeanDefinition defaultCacheResolverFactory = new RootBeanDefinition(
            DefaultCacheResolverFactory.class);
    cacheAttributeSource.setSource(elementSource);
    cacheAttributeSource.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
    final String cacheManagerName = element.getAttribute(XSD_ATTR_CACHE_MANAGER);
    if (StringUtils.hasText(cacheManagerName)) {
        final RuntimeBeanReference cacheManagerReference = new RuntimeBeanReference(cacheManagerName);

        final ConstructorArgumentValues constructorArgumentValues = new ConstructorArgumentValues();
        constructorArgumentValues.addIndexedArgumentValue(0, cacheManagerReference);
        cacheAttributeSource.setConstructorArgumentValues(constructorArgumentValues);

    }

    final RootBeanDefinition defaultCacheKeyGenerator = new RootBeanDefinition(DefaultCacheKeyGenerator.class);
    cacheAttributeSource.setSource(elementSource);
    cacheAttributeSource.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);

    final MutablePropertyValues propertyValues = cacheAttributeSource.getPropertyValues();
    propertyValues.addPropertyValue("defaultCacheKeyGenerator", defaultCacheKeyGenerator);
    propertyValues.addPropertyValue("defaultCacheResolverFactory", defaultCacheResolverFactory);

    final BeanDefinitionRegistry registry = parserContext.getRegistry();
    registry.registerBeanDefinition(JCACHE_CACHE_OPERATION_SOURCE_BEAN_NAME, cacheAttributeSource);

    return new RuntimeBeanReference(JCACHE_CACHE_OPERATION_SOURCE_BEAN_NAME);
}

From source file:org.springframework.beans.factory.DefaultListableBeanFactoryTests.java

/**
 * @param singleton whether the bean created from the factory method on
 * the bean instance should be a singleton or prototype. This flag is
 * used to allow checking of the new ability in 1.2.4 to determine the type
 * of a prototype created from invoking a factory method on a bean instance
 * in the factory./*from  ww w . j  a v  a2 s .c  o  m*/
 */
private void findTypeOfPrototypeFactoryMethodOnBeanInstance(boolean singleton) {
    String expectedNameFromProperties = "tony";
    String expectedNameFromArgs = "gordon";

    DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
    RootBeanDefinition instanceFactoryDefinition = new RootBeanDefinition(BeanWithFactoryMethod.class);
    MutablePropertyValues pvs = new MutablePropertyValues();
    pvs.add("name", expectedNameFromProperties);
    instanceFactoryDefinition.setPropertyValues(pvs);
    lbf.registerBeanDefinition("factoryBeanInstance", instanceFactoryDefinition);

    RootBeanDefinition factoryMethodDefinitionWithProperties = new RootBeanDefinition();
    factoryMethodDefinitionWithProperties.setFactoryBeanName("factoryBeanInstance");
    factoryMethodDefinitionWithProperties.setFactoryMethodName("create");
    if (!singleton) {
        factoryMethodDefinitionWithProperties.setScope(RootBeanDefinition.SCOPE_PROTOTYPE);
    }
    lbf.registerBeanDefinition("fmWithProperties", factoryMethodDefinitionWithProperties);

    RootBeanDefinition factoryMethodDefinitionGeneric = new RootBeanDefinition();
    factoryMethodDefinitionGeneric.setFactoryBeanName("factoryBeanInstance");
    factoryMethodDefinitionGeneric.setFactoryMethodName("createGeneric");
    if (!singleton) {
        factoryMethodDefinitionGeneric.setScope(RootBeanDefinition.SCOPE_PROTOTYPE);
    }
    lbf.registerBeanDefinition("fmGeneric", factoryMethodDefinitionGeneric);

    RootBeanDefinition factoryMethodDefinitionWithArgs = new RootBeanDefinition();
    factoryMethodDefinitionWithArgs.setFactoryBeanName("factoryBeanInstance");
    factoryMethodDefinitionWithArgs.setFactoryMethodName("createWithArgs");
    ConstructorArgumentValues cvals = new ConstructorArgumentValues();
    cvals.addGenericArgumentValue(expectedNameFromArgs);
    factoryMethodDefinitionWithArgs.setConstructorArgumentValues(cvals);
    if (!singleton) {
        factoryMethodDefinitionWithArgs.setScope(RootBeanDefinition.SCOPE_PROTOTYPE);
    }
    lbf.registerBeanDefinition("fmWithArgs", factoryMethodDefinitionWithArgs);

    assertEquals(4, lbf.getBeanDefinitionCount());
    List<String> tbNames = Arrays.asList(lbf.getBeanNamesForType(TestBean.class));
    assertTrue(tbNames.contains("fmWithProperties"));
    assertTrue(tbNames.contains("fmWithArgs"));
    assertEquals(2, tbNames.size());

    TestBean tb = (TestBean) lbf.getBean("fmWithProperties");
    TestBean second = (TestBean) lbf.getBean("fmWithProperties");
    if (singleton) {
        assertSame(tb, second);
    } else {
        assertNotSame(tb, second);
    }
    assertEquals(expectedNameFromProperties, tb.getName());

    tb = (TestBean) lbf.getBean("fmGeneric");
    second = (TestBean) lbf.getBean("fmGeneric");
    if (singleton) {
        assertSame(tb, second);
    } else {
        assertNotSame(tb, second);
    }
    assertEquals(expectedNameFromProperties, tb.getName());

    TestBean tb2 = (TestBean) lbf.getBean("fmWithArgs");
    second = (TestBean) lbf.getBean("fmWithArgs");
    if (singleton) {
        assertSame(tb2, second);
    } else {
        assertNotSame(tb2, second);
    }
    assertEquals(expectedNameFromArgs, tb2.getName());
}

From source file:org.springframework.cloud.function.context.config.KotlinLambdaToFunctionAutoConfiguration.java

/**
 * Will transform all discovered Kotlin's Function1 and Function0 lambdas to java
 * Supplier, Function and Consumer, retaining the original Kotlin type
 * characteristics. In other words the resulting bean could be cast to both java and
 * kotlin types (i.e., java Function&lt;I,O&gt; vs. kotlin Function1&lt;I,O&gt;)
 * @return the bean factory post processor
 *//*from   ww  w.  j  a  v  a2  s. c  o  m*/
@Bean
public BeanFactoryPostProcessor kotlinToFunctionTransformer() {
    return new BeanFactoryPostProcessor() {

        @Override
        public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {

            String[] beanDefinitionNames = beanFactory.getBeanDefinitionNames();
            for (String beanDefinitionName : beanDefinitionNames) {
                BeanDefinition beanDefinition = beanFactory.getBeanDefinition(beanDefinitionName);
                Object source = beanDefinition.getSource();
                if (source instanceof MethodMetadata) {
                    String returnTypeName = ((MethodMetadata) source).getReturnTypeName();
                    if (returnTypeName.startsWith("kotlin.jvm.functions.Function")) {
                        FunctionType functionType = new FunctionType(
                                FunctionContextUtils.findType(beanDefinitionName, beanFactory));
                        if (returnTypeName.equals("kotlin.jvm.functions.Function1")) {
                            if (Unit.class.isAssignableFrom(functionType.getOutputType())) {
                                KotlinLambdaToFunctionAutoConfiguration.this.logger
                                        .debug("Transforming Kotlin lambda " + beanDefinitionName
                                                + " to java Consumer");
                                this.register(beanDefinitionName, beanDefinition, KotlinConsumer.class,
                                        (BeanDefinitionRegistry) beanFactory);
                            } else {
                                KotlinLambdaToFunctionAutoConfiguration.this.logger
                                        .debug("Transforming Kotlin lambda " + beanDefinitionName
                                                + " to java Function");
                                this.register(beanDefinitionName, beanDefinition, KotlinFunction.class,
                                        (BeanDefinitionRegistry) beanFactory);
                            }
                        } else {
                            KotlinLambdaToFunctionAutoConfiguration.this.logger.debug(
                                    "Transforming Kotlin lambda " + beanDefinitionName + " to java Supplier");
                            this.register(beanDefinitionName, beanDefinition, KotlinSupplier.class,
                                    (BeanDefinitionRegistry) beanFactory);
                        }
                    }
                }
            }
        }

        private void register(String originalName, BeanDefinition originalDefinition, Class<?> clazz,
                BeanDefinitionRegistry registry) {
            RootBeanDefinition cbd = new RootBeanDefinition(clazz);
            ConstructorArgumentValues ca = new ConstructorArgumentValues();
            ca.addGenericArgumentValue(originalDefinition);
            cbd.setConstructorArgumentValues(ca);
            registry.removeBeanDefinition(originalName);
            registry.registerBeanDefinition(originalName, cbd);
        }
    };
}