1212*/
1313package io .kubernetes .client .spring .extended .controller ;
1414
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+
1717import io .kubernetes .client .extended .controller .reconciler .Reconciler ;
1818import io .kubernetes .client .informer .SharedInformerFactory ;
19- import io .kubernetes .client .spring .extended .controller .annotation .KubernetesReconciler ;
2019import 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 ;
2722import 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 ;
2826import org .springframework .core .Ordered ;
2927
3028/**
3432 * <p>It will create a {@link io.kubernetes.client.extended.controller.Controller} for every
3533 * reconciler instances registered in the spring bean-factory.
3634 */
37- public class KubernetesReconcilerProcessor implements BeanFactoryPostProcessor , Ordered {
35+ public class KubernetesReconcilerProcessor implements BeanDefinitionRegistryPostProcessor , Ordered {
3836
39- private static final Logger log = LoggerFactory . getLogger ( KubernetesReconcilerProcessor . class ) ;
37+ public static final String DEFAULT_SHARED_INFORMER_FACTORY_BEAN_NAME = "sharedInformerFactory" ;
4038
41- private ControllerManager controllerManager ;
39+ private final String sharedInformerFactoryBeanName ;
4240
43- private ExecutorService controllerManagerDaemon = Executors . newSingleThreadExecutor () ;
41+ private BeanDefinitionRegistry beanDefinitionRegistry ;
4442
45- private SharedInformerFactory sharedInformerFactory ;
43+ public KubernetesReconcilerProcessor () {
44+ this (DEFAULT_SHARED_INFORMER_FACTORY_BEAN_NAME );
45+ }
4646
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 ;
4950 }
5051
5152 @ Override
@@ -54,20 +55,27 @@ public int getOrder() {
5455 }
5556
5657 @ 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 ));
6571
66- KubernetesControllerFactory controllerFactory =
67- new KubernetesControllerFactory (sharedInformerFactory , reconciler );
72+ BeanDefinition controllerFactoryBeanDefinition =
73+ BeanDefinitionBuilder .genericBeanDefinition (
74+ KubernetesControllerFactory .class , kubernetesControllerFactorySupplier )
75+ .getBeanDefinition ();
6876
69- Controller controller = controllerFactory . getObject ();
70- beanFactory . registerSingleton ( reconcilerName , controller );
77+ beanDefinitionRegistry . registerBeanDefinition (
78+ reconcilerName + "Controller" , controllerFactoryBeanDefinition );
7179 }
7280 }
7381}
0 commit comments