21
21
import io .kubernetes .client .spring .extended .controller .annotation .KubernetesInformer ;
22
22
import io .kubernetes .client .spring .extended .controller .annotation .KubernetesInformers ;
23
23
import io .kubernetes .client .util .generic .GenericKubernetesApi ;
24
+ import org .slf4j .Logger ;
25
+ import org .slf4j .LoggerFactory ;
24
26
import org .springframework .beans .BeansException ;
25
27
import org .springframework .beans .factory .BeanFactory ;
28
+ import org .springframework .beans .factory .BeanFactoryAware ;
26
29
import org .springframework .beans .factory .config .ConfigurableListableBeanFactory ;
27
30
import org .springframework .beans .factory .support .BeanDefinitionBuilder ;
28
31
import org .springframework .beans .factory .support .BeanDefinitionRegistry ;
41
44
* injects informers to spring context with the underlying constructing process hidden from users.
42
45
*/
43
46
public class KubernetesInformerFactoryProcessor
44
- implements BeanDefinitionRegistryPostProcessor , Ordered {
47
+ implements BeanDefinitionRegistryPostProcessor , BeanFactoryAware , Ordered {
48
+
49
+ private static final Logger log =
50
+ LoggerFactory .getLogger (KubernetesInformerFactoryProcessor .class );
45
51
46
52
public static final int ORDER = 0 ;
47
53
48
54
private ConfigurableListableBeanFactory beanFactory ;
49
55
50
56
@ Override
51
57
public void postProcessBeanFactory (ConfigurableListableBeanFactory beanFactory )
52
- throws BeansException {
53
- this .beanFactory = beanFactory ;
54
- }
58
+ throws BeansException {}
55
59
56
60
@ Override
57
61
public int getOrder () {
@@ -65,15 +69,22 @@ public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry)
65
69
return ;
66
70
}
67
71
for (String name : registry .getBeanDefinitionNames ()) {
72
+ KubernetesInformers kubernetesInformers = null ;
68
73
Class <?> cls = ((BeanFactory ) registry ).getType (name );
69
74
if (cls != null ) {
70
- KubernetesInformers kubernetesInformers =
75
+ kubernetesInformers =
71
76
AnnotatedElementUtils .getMergedAnnotation (cls , KubernetesInformers .class );
72
- if (kubernetesInformers != null && kubernetesInformers .value ().length > 0 ) {
73
- for (KubernetesInformer kubernetesInformer : kubernetesInformers .value ()) {
74
- registerInformer (registry , kubernetesInformer );
75
- registerLister (registry , kubernetesInformer );
76
- }
77
+ }
78
+ if (kubernetesInformers == null ) {
79
+ kubernetesInformers = beanFactory .findAnnotationOnBean (name , KubernetesInformers .class );
80
+ }
81
+ if (kubernetesInformers == null ) {
82
+ continue ;
83
+ }
84
+ if (kubernetesInformers .value ().length > 0 ) {
85
+ for (KubernetesInformer kubernetesInformer : kubernetesInformers .value ()) {
86
+ registerInformer (registry , kubernetesInformer );
87
+ registerLister (registry , kubernetesInformer );
77
88
}
78
89
}
79
90
}
@@ -137,4 +148,9 @@ private <T extends KubernetesObject> SharedInformer<T> informer(
137
148
api , type , kubernetesInformer .resyncPeriodMillis (), kubernetesInformer .namespace ());
138
149
return sharedIndexInformer ;
139
150
}
151
+
152
+ @ Override
153
+ public void setBeanFactory (BeanFactory beanFactory ) throws BeansException {
154
+ this .beanFactory = (ConfigurableListableBeanFactory ) beanFactory ;
155
+ }
140
156
}
0 commit comments