12
12
*/
13
13
package io .kubernetes .client .spring .extended .controller ;
14
14
15
- import io . kubernetes . client . extended . controller . Controller ;
16
- import io . kubernetes . client . extended . controller . ControllerManager ;
15
+ import static org . springframework . util . Assert . notNull ;
16
+
17
17
import io .kubernetes .client .extended .controller .reconciler .Reconciler ;
18
18
import io .kubernetes .client .informer .SharedInformerFactory ;
19
- import io .kubernetes .client .spring .extended .controller .annotation .KubernetesReconciler ;
20
19
import io .kubernetes .client .spring .extended .controller .factory .KubernetesControllerFactory ;
21
- import java .util .concurrent .ExecutorService ;
22
- import java .util .concurrent .Executors ;
23
- import org .slf4j .Logger ;
24
- import org .slf4j .LoggerFactory ;
25
- import org .springframework .beans .BeansException ;
26
- import org .springframework .beans .factory .config .BeanFactoryPostProcessor ;
20
+ import java .util .function .Supplier ;
21
+ import org .springframework .beans .factory .config .BeanDefinition ;
27
22
import org .springframework .beans .factory .config .ConfigurableListableBeanFactory ;
23
+ import org .springframework .beans .factory .support .BeanDefinitionBuilder ;
24
+ import org .springframework .beans .factory .support .BeanDefinitionRegistry ;
25
+ import org .springframework .beans .factory .support .BeanDefinitionRegistryPostProcessor ;
28
26
import org .springframework .core .Ordered ;
29
27
30
28
/**
34
32
* <p>It will create a {@link io.kubernetes.client.extended.controller.Controller} for every
35
33
* reconciler instances registered in the spring bean-factory.
36
34
*/
37
- public class KubernetesReconcilerProcessor implements BeanFactoryPostProcessor , Ordered {
35
+ public class KubernetesReconcilerProcessor implements BeanDefinitionRegistryPostProcessor , Ordered {
38
36
39
- private static final Logger log = LoggerFactory . getLogger ( KubernetesReconcilerProcessor . class ) ;
37
+ public static final String DEFAULT_SHARED_INFORMER_FACTORY_BEAN_NAME = "sharedInformerFactory" ;
40
38
41
- private ControllerManager controllerManager ;
39
+ private final String sharedInformerFactoryBeanName ;
42
40
43
- private ExecutorService controllerManagerDaemon = Executors . newSingleThreadExecutor () ;
41
+ private BeanDefinitionRegistry beanDefinitionRegistry ;
44
42
45
- private SharedInformerFactory sharedInformerFactory ;
43
+ public KubernetesReconcilerProcessor () {
44
+ this (DEFAULT_SHARED_INFORMER_FACTORY_BEAN_NAME );
45
+ }
46
46
47
- public KubernetesReconcilerProcessor (SharedInformerFactory sharedInformerFactory ) {
48
- this .sharedInformerFactory = sharedInformerFactory ;
47
+ public KubernetesReconcilerProcessor (String sharedInformerFactoryBeanName ) {
48
+ notNull (sharedInformerFactoryBeanName , "SharedInformerFactory bean name is required" );
49
+ this .sharedInformerFactoryBeanName = sharedInformerFactoryBeanName ;
49
50
}
50
51
51
52
@ Override
@@ -54,20 +55,27 @@ public int getOrder() {
54
55
}
55
56
56
57
@ Override
57
- public void postProcessBeanFactory (ConfigurableListableBeanFactory beanFactory )
58
- throws BeansException {
59
- String [] names = beanFactory .getBeanNamesForType (Reconciler .class );
60
- for (String name : names ) {
61
- Reconciler reconciler = (Reconciler ) beanFactory .getBean (name );
62
- KubernetesReconciler kubernetesReconciler =
63
- reconciler .getClass ().getAnnotation (KubernetesReconciler .class );
64
- String reconcilerName = kubernetesReconciler .value ();
58
+ public void postProcessBeanDefinitionRegistry (BeanDefinitionRegistry registry ) {
59
+ this .beanDefinitionRegistry = registry ;
60
+ }
61
+
62
+ @ Override
63
+ public void postProcessBeanFactory (ConfigurableListableBeanFactory beanFactory ) {
64
+ for (String reconcilerName : beanFactory .getBeanNamesForType (Reconciler .class )) {
65
+
66
+ Supplier <KubernetesControllerFactory > kubernetesControllerFactorySupplier =
67
+ () ->
68
+ new KubernetesControllerFactory (
69
+ beanFactory .getBean (sharedInformerFactoryBeanName , SharedInformerFactory .class ),
70
+ beanFactory .getBean (reconcilerName , Reconciler .class ));
65
71
66
- KubernetesControllerFactory controllerFactory =
67
- new KubernetesControllerFactory (sharedInformerFactory , reconciler );
72
+ BeanDefinition controllerFactoryBeanDefinition =
73
+ BeanDefinitionBuilder .genericBeanDefinition (
74
+ KubernetesControllerFactory .class , kubernetesControllerFactorySupplier )
75
+ .getBeanDefinition ();
68
76
69
- Controller controller = controllerFactory . getObject ();
70
- beanFactory . registerSingleton ( reconcilerName , controller );
77
+ beanDefinitionRegistry . registerBeanDefinition (
78
+ reconcilerName + "Controller" , controllerFactoryBeanDefinition );
71
79
}
72
80
}
73
81
}
0 commit comments