List of usage examples for org.springframework.beans.factory.config BeanDefinition getSource
@Nullable
default Object getSource()
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<I,O> vs. kotlin Function1<I,O>) * @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); } }; }