Example usage for org.springframework.beans.factory.config BeanDefinition getSource

List of usage examples for org.springframework.beans.factory.config BeanDefinition getSource

Introduction

In this page you can find the example usage for org.springframework.beans.factory.config BeanDefinition getSource.

Prototype

@Nullable
default Object getSource() 

Source Link

Document

Return the configuration source Object for this metadata element (may be null ).

Usage

From source file:com.quancheng.saluki.boot.runner.GrpcServiceRunner.java

private Collection<Object> getTypedBeansWithAnnotation(Class<? extends Annotation> annotationType)
        throws Exception {
    return Stream.of(applicationContext.getBeanNamesForAnnotation(annotationType)).filter(name -> {
        BeanDefinition beanDefinition = applicationContext.getBeanFactory().getBeanDefinition(name);
        if (beanDefinition.getSource() instanceof StandardMethodMetadata) {
            StandardMethodMetadata metadata = (StandardMethodMetadata) beanDefinition.getSource();
            return metadata.isAnnotated(annotationType.getName());
        }//ww w  .j  av a  2 s  .co  m
        return null != applicationContext.getBeanFactory().findAnnotationOnBean(name, annotationType);
    }).map(name -> applicationContext.getBeanFactory().getBean(name)).collect(Collectors.toList());

}

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
 *//*  ww  w  .  j a v  a2 s. co 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);
        }
    };
}