Skip to content

Commit 08bd040

Browse files
committed
chore: support KubernetesInformers annotation on bean constructor
1 parent bef3b24 commit 08bd040

File tree

3 files changed

+30
-16
lines changed

3 files changed

+30
-16
lines changed

spring/src/main/java/io/kubernetes/client/spring/extended/controller/KubernetesInformerFactoryProcessor.java

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,11 @@
2121
import io.kubernetes.client.spring.extended.controller.annotation.KubernetesInformer;
2222
import io.kubernetes.client.spring.extended.controller.annotation.KubernetesInformers;
2323
import io.kubernetes.client.util.generic.GenericKubernetesApi;
24+
import org.slf4j.Logger;
25+
import org.slf4j.LoggerFactory;
2426
import org.springframework.beans.BeansException;
2527
import org.springframework.beans.factory.BeanFactory;
28+
import org.springframework.beans.factory.BeanFactoryAware;
2629
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
2730
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
2831
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
@@ -41,17 +44,18 @@
4144
* injects informers to spring context with the underlying constructing process hidden from users.
4245
*/
4346
public class KubernetesInformerFactoryProcessor
44-
implements BeanDefinitionRegistryPostProcessor, Ordered {
47+
implements BeanDefinitionRegistryPostProcessor, BeanFactoryAware, Ordered {
48+
49+
private static final Logger log =
50+
LoggerFactory.getLogger(KubernetesInformerFactoryProcessor.class);
4551

4652
public static final int ORDER = 0;
4753

4854
private ConfigurableListableBeanFactory beanFactory;
4955

5056
@Override
5157
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)
52-
throws BeansException {
53-
this.beanFactory = beanFactory;
54-
}
58+
throws BeansException {}
5559

5660
@Override
5761
public int getOrder() {
@@ -65,15 +69,22 @@ public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry)
6569
return;
6670
}
6771
for (String name : registry.getBeanDefinitionNames()) {
72+
KubernetesInformers kubernetesInformers = null;
6873
Class<?> cls = ((BeanFactory) registry).getType(name);
6974
if (cls != null) {
70-
KubernetesInformers kubernetesInformers =
75+
kubernetesInformers =
7176
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);
7788
}
7889
}
7990
}
@@ -137,4 +148,9 @@ private <T extends KubernetesObject> SharedInformer<T> informer(
137148
api, type, kubernetesInformer.resyncPeriodMillis(), kubernetesInformer.namespace());
138149
return sharedIndexInformer;
139150
}
151+
152+
@Override
153+
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
154+
this.beanFactory = (ConfigurableListableBeanFactory) beanFactory;
155+
}
140156
}

spring/src/main/java/io/kubernetes/client/spring/extended/controller/annotation/KubernetesInformers.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
* io.kubernetes.client.spring.extended.controller.annotation.KubernetesInformer} onto one bean
2727
* method.
2828
*/
29-
@Target({ElementType.TYPE})
29+
@Target({ElementType.TYPE, ElementType.METHOD})
3030
@Retention(RetentionPolicy.RUNTIME)
3131
public @interface KubernetesInformers {
3232

spring/src/test/java/io/kubernetes/client/spring/extended/controller/KubernetesInformerCreatorTest.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,6 @@ public ApiClient testingApiClient() {
6666
}
6767

6868
@Bean
69-
public TestSharedInformerFactory testSharedInformerFactory() {
70-
return new TestSharedInformerFactory();
71-
}
72-
7369
@KubernetesInformers({
7470
@KubernetesInformer(
7571
apiTypeClass = V1Pod.class,
@@ -86,7 +82,9 @@ public TestSharedInformerFactory testSharedInformerFactory() {
8682
apiVersion = "v1",
8783
resourcePlural = "configmaps")),
8884
})
89-
static class TestSharedInformerFactory {}
85+
public SharedInformerFactory testSharedInformerFactory() {
86+
return new SharedInformerFactory();
87+
}
9088
}
9189

9290
@Autowired private SharedInformerFactory informerFactory;

0 commit comments

Comments
 (0)