|
22 | 22 | import org.slf4j.LoggerFactory;
|
23 | 23 | import org.springframework.beans.BeansException;
|
24 | 24 | import org.springframework.beans.factory.NoSuchBeanDefinitionException;
|
25 |
| -import org.springframework.beans.factory.config.BeanFactoryPostProcessor; |
26 | 25 | import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
|
| 26 | +import org.springframework.beans.factory.support.AbstractBeanDefinition; |
| 27 | +import org.springframework.beans.factory.support.BeanDefinitionRegistry; |
| 28 | +import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor; |
| 29 | +import org.springframework.beans.factory.support.RootBeanDefinition; |
27 | 30 | import org.springframework.core.Ordered;
|
28 | 31 | import org.springframework.core.ResolvableType;
|
29 | 32 | import org.springframework.stereotype.Component;
|
|
37 | 40 | * injects informers to spring context with the underlying constructing process hidden from users.
|
38 | 41 | */
|
39 | 42 | @Component
|
40 |
| -public class KubernetesInformerFactoryProcessor implements BeanFactoryPostProcessor, Ordered { |
| 43 | +public class KubernetesInformerFactoryProcessor |
| 44 | + implements BeanDefinitionRegistryPostProcessor, Ordered { |
41 | 45 |
|
42 | 46 | private static final Logger log =
|
43 | 47 | LoggerFactory.getLogger(KubernetesInformerFactoryProcessor.class);
|
44 | 48 |
|
45 | 49 | public static final int ORDER = 0;
|
46 | 50 |
|
| 51 | + private BeanDefinitionRegistry beanDefinitionRegistry; |
| 52 | + |
47 | 53 | @Override
|
48 | 54 | public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)
|
49 | 55 | throws BeansException {
|
@@ -124,17 +130,35 @@ public Watchable watch(CallGeneratorParams params) throws ApiException {
|
124 | 130 | ResolvableType informerType =
|
125 | 131 | ResolvableType.forClassWithGenerics(
|
126 | 132 | SharedInformer.class, kubernetesInformer.apiTypeClass());
|
127 |
| - beanFactory.registerResolvableDependency(informerType.resolve(), sharedIndexInformer); |
| 133 | + RootBeanDefinition informerBean = new RootBeanDefinition(); |
| 134 | + informerBean.setTargetType(informerType); |
| 135 | + informerBean.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_BY_TYPE); |
| 136 | + informerBean.setAutowireCandidate(true); |
| 137 | + String informerBeanName = informerType.toString(); |
| 138 | + this.beanDefinitionRegistry.registerBeanDefinition(informerBeanName, informerBean); |
| 139 | + beanFactory.registerSingleton(informerBeanName, sharedIndexInformer); |
128 | 140 |
|
129 | 141 | Lister lister = new Lister(sharedIndexInformer.getIndexer());
|
130 | 142 | ResolvableType listerType =
|
131 | 143 | ResolvableType.forClassWithGenerics(Lister.class, kubernetesInformer.apiTypeClass());
|
132 |
| - beanFactory.registerResolvableDependency(listerType.resolve(), lister); |
| 144 | + RootBeanDefinition listerBean = new RootBeanDefinition(); |
| 145 | + listerBean.setTargetType(listerType); |
| 146 | + listerBean.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_BY_TYPE); |
| 147 | + listerBean.setAutowireCandidate(true); |
| 148 | + String listerBeanName = listerType.toString(); |
| 149 | + this.beanDefinitionRegistry.registerBeanDefinition(listerBeanName, listerBean); |
| 150 | + beanFactory.registerSingleton(listerBeanName, lister); |
133 | 151 | }
|
134 | 152 | }
|
135 | 153 |
|
136 | 154 | @Override
|
137 | 155 | public int getOrder() {
|
138 | 156 | return 0;
|
139 | 157 | }
|
| 158 | + |
| 159 | + @Override |
| 160 | + public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) |
| 161 | + throws BeansException { |
| 162 | + this.beanDefinitionRegistry = registry; |
| 163 | + } |
140 | 164 | }
|
0 commit comments