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 = LoggerFactory .getLogger (KubernetesInformerFactoryProcessor .class );
45
50
46
51
public static final int ORDER = 0 ;
47
52
48
53
private ConfigurableListableBeanFactory beanFactory ;
49
54
50
55
@ Override
51
56
public void postProcessBeanFactory (ConfigurableListableBeanFactory beanFactory )
52
- throws BeansException {
53
- this .beanFactory = beanFactory ;
57
+ throws BeansException {
54
58
}
55
59
56
60
@ Override
@@ -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 =
71
- 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
- }
75
+ kubernetesInformers =
76
+ AnnotatedElementUtils .getMergedAnnotation (cls , KubernetesInformers .class );
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
}
@@ -127,14 +138,19 @@ private <T extends KubernetesObject> SharedInformer<T> informer(
127
138
final GenericKubernetesApi api =
128
139
new GenericKubernetesApi (
129
140
kubernetesInformer .apiTypeClass (),
130
- kubernetesInformer .apiListTypeClass (),
131
- kubernetesInformer .groupVersionResource ().apiGroup (),
132
- kubernetesInformer .groupVersionResource ().apiVersion (),
133
- kubernetesInformer .groupVersionResource ().resourcePlural (),
134
- apiClient );
141
+ kubernetesInformer .apiListTypeClass (),
142
+ kubernetesInformer .groupVersionResource ().apiGroup (),
143
+ kubernetesInformer .groupVersionResource ().apiVersion (),
144
+ kubernetesInformer .groupVersionResource ().resourcePlural (),
145
+ apiClient );
135
146
SharedIndexInformer <T > sharedIndexInformer =
136
- sharedInformerFactory .sharedIndexInformerFor (
137
- api , type , kubernetesInformer .resyncPeriodMillis (), kubernetesInformer .namespace ());
147
+ sharedInformerFactory .sharedIndexInformerFor (
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