1616package org .springframework .data .aot ;
1717
1818import java .util .Collections ;
19+ import java .util .function .Function ;
1920import java .util .function .Supplier ;
2021
2122import org .apache .commons .logging .Log ;
@@ -49,6 +50,15 @@ public class SpringDataBeanFactoryInitializationAotProcessor implements BeanFact
4950
5051 private static final Log logger = LogFactory .getLog (BeanFactoryInitializationAotProcessor .class );
5152
53+ private static final Function <Object , Object > arrayToListFunction = target ->
54+ ObjectUtils .isArray (target ) ? CollectionUtils .arrayToList (target ) : target ;
55+
56+ private static final Function <Object , Object > asSingletonSetFunction = target ->
57+ !(target instanceof Iterable <?>) ? Collections .singleton (target ) : target ;
58+
59+ private static final Function <Object , Object > constructorArgumentFunction =
60+ arrayToListFunction .andThen (asSingletonSetFunction );
61+
5262 @ Nullable
5363 @ Override
5464 public BeanFactoryInitializationAotContribution processAheadOfTime (ConfigurableListableBeanFactory beanFactory ) {
@@ -64,33 +74,38 @@ private void processManagedTypes(ConfigurableListableBeanFactory beanFactory) {
6474
6575 BeanDefinition beanDefinition = beanFactory .getBeanDefinition (beanName );
6676
67- if (beanDefinition .getConstructorArgumentValues ().isEmpty ()) {
68- return ;
69- }
77+ if (hasConstructorArguments (beanDefinition )) {
7078
71- ValueHolder argumentValue = beanDefinition .getConstructorArgumentValues ().getArgumentValue (0 , null , null , null );
79+ ValueHolder argumentValue = beanDefinition .getConstructorArgumentValues ()
80+ .getArgumentValue (0 , null , null , null );
7281
73- if (argumentValue .getValue ()instanceof Supplier supplier ) {
82+ if (argumentValue .getValue () instanceof Supplier supplier ) {
7483
75- if (logger .isDebugEnabled ()) {
76- logger .info (String .format ("Replacing ManagedType bean definition %s." , beanName ));
77- }
84+ if (logger .isDebugEnabled ()) {
85+ logger .info (String .format ("Replacing ManagedType bean definition %s." , beanName ));
86+ }
7887
79- Object value = supplier .get ();
80- if (ObjectUtils .isArray (value )) {
81- value = CollectionUtils .arrayToList (value );
82- }
83- if (!(value instanceof Iterable <?>)) {
84- value = Collections .singleton (value );
85- }
88+ Object value = constructorArgumentFunction .apply (supplier .get ());
8689
87- BeanDefinition beanDefinitionReplacement = BeanDefinitionBuilder .rootBeanDefinition (ManagedTypes .class )
88- .setFactoryMethod ("fromIterable" ).addConstructorArgValue (value ).getBeanDefinition ();
90+ BeanDefinition beanDefinitionReplacement = newManagedTypeBeanDefinition (value );
8991
90- registry .removeBeanDefinition (beanName );
91- registry .registerBeanDefinition (beanName , beanDefinitionReplacement );
92+ registry .removeBeanDefinition (beanName );
93+ registry .registerBeanDefinition (beanName , beanDefinitionReplacement );
94+ }
9295 }
9396 }
9497 }
9598 }
99+
100+ private boolean hasConstructorArguments (BeanDefinition beanDefinition ) {
101+ return !beanDefinition .getConstructorArgumentValues ().isEmpty ();
102+ }
103+
104+ private BeanDefinition newManagedTypeBeanDefinition (Object constructorArgumentValue ) {
105+
106+ return BeanDefinitionBuilder .rootBeanDefinition (ManagedTypes .class )
107+ .setFactoryMethod ("fromIterable" )
108+ .addConstructorArgValue (constructorArgumentValue )
109+ .getBeanDefinition ();
110+ }
96111}
0 commit comments