8000 add registrar · JavaCourse00/JavaCourseCodes@e84d39f · GitHub
[go: up one dir, main page]

Skip to content

Commit e84d39f

Browse files
committed
add registrar
1 parent a378db1 commit e84d39f

File tree

7 files changed

+191
-7
lines changed

7 files changed

+191
-7
lines changed

04fx/demo/src/main/java/A.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/**
2+
* Description for this class.
3+
*
4+
* @Author : kimmking(kimmking@apache.org)
5+
* @create 2022/12/16 10:55
6+
*/
7+
public class A {
8+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package io.kimmking.javacourse.demo;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Data;
5+
6+
/**
7+
* Description for this class.
8+
*
9+
* @Author : kimmking(kimmking@apache.org)
10+
* @create 2022/11/29 16:05
11+
*/
12+
@Data
13+
public class ConsConfig {
14+
15+
private String demoName;
16+
private String demoDesc;
17+
18+
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package io.kimmking.javacourse.demo;
2+
3+
import org.springframework.beans.factory.config.ConstructorArgumentValues;
4+
import org.springframework.beans.factory.support.AbstractBeanDefinition;
5+
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
6+
import org.springframework.beans.factory.support.RootBeanDefinition;
7+
import org.springframework.context.EnvironmentAware;
8+
import org.springframework.context.annotation.Configuration;
9+
import org.springframework.context.annotation.Import;
10+
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
11+
import org.springframework.core.env.Environment;
12+
import org.springframework.core.type.AnnotationMetadata;
13+
14+
15+
/**
16+
* Description for this class.
17+
*
18+
* @Author : kimmking(kimmking@apache.org)
19+
* @create 2022/12/22 16:43
20+
*/
21+
22+
@Configuration
23+
//@EnableConfigurationProperties(ConsConfigs.class)
24+
@Import(ConsConfigAutoConfiguration.ConsRegistrar.class)
25+
public class ConsConfigAutoConfiguration {
26+
public static class ConsRegistrar implements ImportBeanDefinitionRegistrar, EnvironmentAware {
27+
28+
Environment environment;
29+
// ApplicationContext applicationContext;
30+
// @Override
31+
// public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
32+
// this.applicationContext = applicationContext;
33+
// }
34+
35+
@Override
36+
public void setEnvironment(Environment environment) {
37+
this.environment = environment;
38+
}
39+
40+
41+
42+
@Override
43+
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
44+
//ImportBeanDefinitionRegistrar.super.registerBeanDefinitions(importingClassMetadata, registry);
45+
46+
RootBeanDefinition def = new RootBeanDefinition();
47+
def.setBeanClass(ConsConfig.class);
48+
registry.registerBeanDefinition("cons", def);
49+
50+
RootBeanDefinition definition = new RootBeanDefinition();
51+
definition.setBeanClass(ConsConfigs.class);
52+
definition.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_BY_TYPE);
53+
definition.setDependencyCheck(AbstractBeanDefinition.DEPENDENCY_CHECK_NONE);
54+
//ConstructorArgumentValues argumentValues = new ConstructorArgumentValues();
55+
56+
//ConsConfig config= applicationContext.getBean(ConsConfig.class);
57+
// String name = ConsConfig.class.getCanonicalName();
58+
// boolean exist = registry.containsBeanDefinition(name);
59+
// if(exist) {
60+
// argumentValues.addGenericArgumentValue(registry.getBeanDefinition(name));
61+
// } else {
62+
// ConsConfig cf = new ConsConfig();
63+
// cf.setDemoName("defaultName1");
64+
// cf.setDemoDesc("defaultDesc1");
65+
// argumentValues.addGenericArgumentValue(cf);
66+
// }
67+
//definition.setConstructorArgumentValues(argumentValues);
68+
registry.registerBeanDefinition("conss", definition);
69+
}
70+
}
71+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package io.kimmking.javacourse.demo;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Data;
5+
6+
import java.util.List;
7+
8+
/**
9+
* Description for this class.
10+
*
11+
* @Author : kimmking(kimmking@apache.org)
12+
* @create 2022/12/22 16:47
13+
*/
14+
@Data
15+
@AllArgsConstructor
16+
public class ConsConfigs {
17+
18+
private List<ConsConfig> config;
19+
20+
}
Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,72 @@
11
package io.kimmking.javacourse.demo;
22

3+
import org.springframework.beans.factory.annotation.Autowired;
4+
import org.springframework.boot.ApplicationArguments;
5+
import org.springframework.boot.ApplicationRunner;
36
import org.springframework.boot.SpringApplication;
47
import org.springframework.boot.autoconfigure.SpringBootApplication;
8+
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
9+
import org.springframework.context.ApplicationContext;
10+
import org.springframework.context.EnvironmentAware;
11+
import org.springframework.context.annotation.Bean;
12+
import org.springframework.context.annotation.PropertySource;
13+
import org.springframework.core.env.Environment;
14+
15+
import javax.annotation.Resource;
516

617
@SpringBootApplication
7-
public class DemoApplication {
18+
public class DemoApplication implements EnvironmentAware, ApplicationRunner {
19+
20+
Environment environment;
21+
22+
@Resource(name="a1")
23+
DemoConfig a1;
824

925
public static void main(String[] args) {
1026
SpringApplication.run(DemoApplication.class, args);
1127
}
1228

29+
@Override
30+
public void setEnvironment(Environment environment) {
31+
this.environment = environment;
32+
}
33+
34+
@Autowired
35+
ApplicationContext context;
36+
37+
@Bean
38+
//@ConditionalOnMissingBean
39+
public ConsConfig defaultConsConfig() {
40+
ConsConfig cf = new ConsConfig();
41+
cf.setDemoName("defaultName");
42+
cf.setDemoDesc("defaultDesc");
43+
return cf;
44+
}
45+
46+
@Override
47+
public void run(ApplicationArguments args) throws Exception {
48+
System.out.println(environment.getProperty("a"));
49+
System.out.println(a1.getDemoName());
50+
51+
DemoConfig a4 = (DemoConfig) context.getBean("a4");
52+
System.out.println(a4.getDemoName());
53+
54+
System.out.println(context.getBean(ConsConfigs.class));
55+
56+
}
57+
58+
@EnableDemoConfigBindings(prefix = "demo.config", type = DemoConfig.class)
59+
@PropertySource("application.properties")
60+
public static class TestDemoConfig {
61+
62+
}
63+
64+
@Bean("a4")
65+
@ConditionalOnClass(name="A")
66+
DemoConfig createA4() {
67+
DemoConfig config = new DemoConfig();
68+
config.setDemoName("a4");
69+
config.setDemoDesc("this is a4");
70+
return config;
71+
}
1372
}

04fx/demo/src/main/java/io/kimmking/javacourse/demo/DemoConfigBindingsRegistrar.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,9 @@ private void registerDubboConfigBeans(String prefix,
6161
Collections.singleton(resolveSingleBeanName(properties, configClass, registry));
6262
Map<String, Map<String, Object>> 527D groupProperties = getGroupProperties(properties, beanNames);
6363
for (String beanName : beanNames) {
64+
65+
System.out.println(" ==> registerDemoConfigBean:" + beanName);
66+
6467
registerDemoConfigBean(beanName, configClass, registry, groupProperties.get(beanName));
6568
//registerDubboConfigBindingBeanPostProcessor(prefix, beanName, multiple, registry);
6669
}

04fx/demo/src/test/java/io/kimmking/javacourse/demo/DemoApplicationTests.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,11 @@ class DemoApplicationTests {
1414
@Test
1515
void testDemoConfig() {
1616
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
17-
context.register(TestConfig.class);
17+
context.register(DemoApplication.TestDemoConfig.class);
1818
context.refresh();
1919

20+
21+
2022
System.out.println(Arrays.toString(context.getBeanNamesForType(DemoConfig.class)));
2123
assertEquals(3, context.getBeansOfType(DemoConfig.class).size());
2224

@@ -35,12 +37,15 @@ void testDemoConfig() {
3537
assertEquals("d3", demoConfig.getDemoName());
3638
assertEquals("demo3", demoConfig.getDemoDesc());
3739

38-
}
39-
40-
@EnableDemoConfigBindings(prefix = "demo.config", type = DemoConfig.class)
41-
@PropertySource("application.properties")
42-
private static class TestConfig {
40+
// context.refresh();
41+
// System.out.println(Arrays.toString(context.getBeanNamesForType(DemoConfig.class)));
4342

4443
}
4544

45+
// @EnableDemoConfigBindings(prefix = "demo.config", type = DemoConfig.class)
46+
// @PropertySource("application.properties")
47+
// private static class TestConfig {
48+
//
49+
// }
50+
4651
}

0 commit comments

Comments
 (0)
0