Skip to content

Commit ad2b4c3

Browse files
authored
Merge pull request #1603 from yue9944882/chore/informers-bean-constructor
Chore: Support KubernetesInformers annotation on bean constructor
2 parents a61fd5a + 0a89fa1 commit ad2b4c3

File tree

3 files changed

+28
-19
lines changed

3 files changed

+28
-19
lines changed

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

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@
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.spring.extended.controller.config.KubernetesInformerProperties;
24-
import io.kubernetes.client.spring.extended.controller.factory.KubernetesControllerFactory;
2524
import io.kubernetes.client.util.generic.GenericKubernetesApi;
2625
import org.slf4j.Logger;
2726
import org.slf4j.LoggerFactory;
2827
import org.springframework.beans.BeansException;
2928
import org.springframework.beans.factory.BeanFactory;
29+
import org.springframework.beans.factory.BeanFactoryAware;
3030
import org.springframework.beans.factory.annotation.Autowired;
3131
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
3232
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
@@ -46,21 +46,20 @@
4646
* injects informers to spring context with the underlying constructing process hidden from users.
4747
*/
4848
public class KubernetesInformerFactoryProcessor
49-
implements BeanDefinitionRegistryPostProcessor, Ordered {
49+
implements BeanDefinitionRegistryPostProcessor, BeanFactoryAware, Ordered {
5050

51-
public static final int ORDER = 0;
51+
private static final Logger log =
52+
LoggerFactory.getLogger(KubernetesInformerFactoryProcessor.class);
5253

53-
private static final Logger log = LoggerFactory.getLogger(KubernetesControllerFactory.class);
54+
public static final int ORDER = 0;
5455

5556
@Autowired private KubernetesInformerProperties informerProperties;
5657

5758
private ConfigurableListableBeanFactory beanFactory;
5859

5960
@Override
6061
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)
61-
throws BeansException {
62-
this.beanFactory = beanFactory;
63-
}
62+
throws BeansException {}
6463

6564
@Override
6665
public int getOrder() {
@@ -74,15 +73,22 @@ public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry)
7473
return;
7574
}
7675
for (String name : registry.getBeanDefinitionNames()) {
76+
KubernetesInformers kubernetesInformers = null;
7777
Class<?> cls = ((BeanFactory) registry).getType(name);
7878
if (cls != null) {
79-
KubernetesInformers kubernetesInformers =
79+
kubernetesInformers =
8080
AnnotatedElementUtils.getMergedAnnotation(cls, KubernetesInformers.class);
81-
if (kubernetesInformers != null && kubernetesInformers.value().length > 0) {
82-
for (KubernetesInformer kubernetesInformer : kubernetesInformers.value()) {
83-
registerInformer(registry, kubernetesInformer);
84-
registerLister(registry, kubernetesInformer);
85-
}
81+
}
82+
if (kubernetesInformers == null) {
83+
kubernetesInformers = beanFactory.findAnnotationOnBean(name, KubernetesInformers.class);
84+
}
85+
if (kubernetesInformers == null) {
86+
continue;
87+
}
88+
if (kubernetesInformers.value().length > 0) {
89+
for (KubernetesInformer kubernetesInformer : kubernetesInformers.value()) {
90+
registerInformer(registry, kubernetesInformer);
91+
registerLister(registry, kubernetesInformer);
8692
}
8793
}
8894
}
@@ -160,4 +166,9 @@ private <T extends KubernetesObject> SharedInformer<T> informer(
160166
api, type, kubernetesInformer.resyncPeriodMillis(), kubernetesInformer.namespace());
161167
return sharedIndexInformer;
162168
}
169+
170+
@Override
171+
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
172+
this.beanFactory = (ConfigurableListableBeanFactory) beanFactory;
173+
}
163174
}

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)