Skip to content

Commit 48a512f

Browse files
authored
Merge branch 'dianpoint:main' into main
2 parents 251fb74 + e2c3b78 commit 48a512f

15 files changed

+489
-11
lines changed

src/main/java/com/dianpoint/summer/beans/factory/config/AbstractAutowireCapableBeanFactory.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
package com.dianpoint.summer.beans.factory.config;
22

3-
import java.util.ArrayList;
4-
import java.util.List;
5-
63
import com.dianpoint.summer.beans.BeansException;
7-
import com.dianpoint.summer.beans.factory.annotation.Autowired;
8-
import com.dianpoint.summer.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor;
94
import com.dianpoint.summer.beans.factory.support.AbstractBeanFactory;
105

6+
import java.util.ArrayList;
7+
import java.util.List;
8+
119
/**
1210
* @author: github/ccoderJava
1311
* @email: congccoder@gmail.com

src/main/java/com/dianpoint/summer/beans/factory/config/BeanDefinition.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.dianpoint.summer.beans.factory.config;
22

33
import com.dianpoint.summer.beans.PropertyValues;
4-
import com.dianpoint.summer.beans.factory.config.ConstructorArgumentValues;
54

65
/**
76
* <p>

src/main/java/com/dianpoint/summer/beans/factory/support/DefaultListableBeanFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public int getBeanDefinitionCount() {
2525

2626
@Override
2727
public String[] getBeanDefinitionNames() {
28-
return (String[])this.beanDefinitionNames.toArray();
28+
return this.beanDefinitionNames.toArray(new String[this.beanDefinitionNames.size()]);
2929
}
3030

3131
@Override
@@ -38,7 +38,7 @@ public String[] getBeanNamesForType(Class<?> type) {
3838
results.add(beanName);
3939
}
4040
}
41-
return (String[])results.toArray();
41+
return results.toArray(new String[results.size()]);
4242
}
4343

4444
@SuppressWarnings("unchecked")
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package com.dianpoint.summer.test.beans;
2+
3+
import com.dianpoint.summer.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor;
4+
import com.dianpoint.summer.beans.factory.config.AbstractAutowireCapableBeanFactory;
5+
import com.dianpoint.summer.beans.factory.config.BeanDefinition;
6+
import com.dianpoint.summer.beans.factory.support.DefaultListableBeanFactory;
7+
import com.dianpoint.summer.test.xml.beans.AutowiredService;
8+
import com.dianpoint.summer.test.xml.beans.BaseService;
9+
import org.junit.Assert;
10+
import org.junit.BeforeClass;
11+
import org.junit.Test;
12+
13+
/**
14+
* @author wangyi
15+
* @date 2023/3/29
16+
*/
17+
public class AbstractAutowireCapableBeanFactoryTest {
18+
static AbstractAutowireCapableBeanFactory abstractAutowireCapableBeanFactory;
19+
20+
21+
22+
@BeforeClass
23+
public static void init(){
24+
abstractAutowireCapableBeanFactory = new DefaultListableBeanFactory();
25+
// 设置autowired的postProcessor
26+
abstractAutowireCapableBeanFactory.addBeanPostProcessor(new AutowiredAnnotationBeanPostProcessor());
27+
// 分别注册baseService和autowireService
28+
// baseService持有autowireService的@Autowired
29+
30+
// 需要先注册beanDefinition,再注册bean
31+
abstractAutowireCapableBeanFactory.registerBeanDefinition("baseService",new BeanDefinition("baseService", BaseService.class.getName()));
32+
abstractAutowireCapableBeanFactory.registerBeanDefinition("autowiredService",new BeanDefinition("autowiredService", AutowiredService.class.getName()));
33+
34+
abstractAutowireCapableBeanFactory.registerBean("baseService",new BaseService());
35+
abstractAutowireCapableBeanFactory.registerBean("autowiredService",new AutowiredService());
36+
}
37+
38+
39+
@Test
40+
public void testGetBeanPostProcessorCount() throws Exception {
41+
// init初始化了一条
42+
final int result = abstractAutowireCapableBeanFactory.getBeanPostProcessorCount();
43+
Assert.assertEquals(1, result);
44+
}
45+
46+
@Test
47+
public void testApplyBeanPostProcessorsBeforeInitialization() throws Exception {
48+
final BaseService baseService = (BaseService)abstractAutowireCapableBeanFactory.getBean("baseService");
49+
final Object result = abstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(baseService, "baseService");
50+
Assert.assertEquals(baseService, result);
51+
}
52+
53+
54+
@Test
55+
public void testApplyBeanPostProcessorsBeforeInitialization_errorBeanNameCase() throws Exception {
56+
final BaseService baseService = (BaseService)abstractAutowireCapableBeanFactory.getBean("baseService");
57+
// 方法的beanName无效
58+
final Object result = abstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(baseService, "baseService_withError");
59+
Assert.assertEquals(baseService, result);
60+
}
61+
62+
63+
@Test
64+
public void testApplyBeanPostProcessorsAfterInitialization() throws Exception {
65+
final BaseService baseService = (BaseService)abstractAutowireCapableBeanFactory.getBean("baseService");
66+
final Object result = abstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(baseService, "baseService");
67+
Assert.assertNull( result);
68+
}
69+
70+
71+
@Test
72+
public void testGetDependentBeans() throws Exception {
73+
final String[] result = abstractAutowireCapableBeanFactory.getDependentBeans("beanName");
74+
Assert.assertArrayEquals(new String[]{}, result);
75+
}
76+
77+
@Test
78+
public void testGetDependenciesForBean() throws Exception {
79+
final String[] result = abstractAutowireCapableBeanFactory.getDependenciesForBean("beanName");
80+
Assert.assertArrayEquals(new String[]{}, result);
81+
}
82+
83+
}
Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
package com.dianpoint.summer.test.beans;
2+
3+
import com.dianpoint.summer.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor;
4+
import com.dianpoint.summer.beans.factory.config.BeanDefinition;
5+
import com.dianpoint.summer.beans.factory.support.DefaultListableBeanFactory;
6+
import com.dianpoint.summer.test.xml.beans.AutowiredService;
7+
import com.dianpoint.summer.test.xml.beans.BaseService;
8+
import org.junit.Assert;
9+
import org.junit.BeforeClass;
10+
import org.junit.Test;
11+
12+
import java.util.Map;
13+
14+
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
15+
16+
17+
/**
18+
* @author wangyi
19+
* @date 2023/3/28
20+
*/
21+
public class DefaultListableBeanFactoryTest {
22+
23+
static DefaultListableBeanFactory defaultListableBeanFactory;
24+
25+
@BeforeClass
26+
public static void init(){
27+
// 默认设置值
28+
defaultListableBeanFactory = new DefaultListableBeanFactory();
29+
// 注册若干 beanDefinition
30+
final BeanDefinition beanDefinition1 = new BeanDefinition("baseService1", BaseService.class.getName());
31+
final BeanDefinition beanDefinition2 = new BeanDefinition("baseService2", BaseService.class.getName());
32+
final BeanDefinition beanDefinition3 = new BeanDefinition("baseService3", BaseService.class.getName());
33+
final BeanDefinition beanDefinition4 = new BeanDefinition("baseService4", BaseService.class.getName());
34+
defaultListableBeanFactory.registerBeanDefinition("baseService1",beanDefinition1);
35+
defaultListableBeanFactory.registerBeanDefinition("baseService2",beanDefinition2);
36+
defaultListableBeanFactory.registerBeanDefinition("baseService3",beanDefinition3);
37+
defaultListableBeanFactory.registerBeanDefinition("baseService4",beanDefinition4);
38+
// 注册beans
39+
defaultListableBeanFactory.registerBean("baseService1",beanDefinition1);
40+
defaultListableBeanFactory.registerBean("baseService2",beanDefinition2);
41+
defaultListableBeanFactory.registerBean("baseService3",beanDefinition3);
42+
defaultListableBeanFactory.registerBean("baseService4",beanDefinition4);
43+
// 覆盖一条
44+
defaultListableBeanFactory.registerBean("baseService4",beanDefinition4);
45+
}
46+
47+
48+
@Test
49+
public void testGetBeanDefinitionCount() throws Exception {
50+
final int result = defaultListableBeanFactory.getBeanDefinitionCount();
51+
Assert.assertEquals(4, result);
52+
}
53+
54+
@Test
55+
public void testGetBeanDefinitionNames() throws Exception {
56+
final String[] result = defaultListableBeanFactory.getBeanDefinitionNames();
57+
Assert.assertArrayEquals(new String[]{"baseService1","baseService2","baseService3","baseService4"}, result);
58+
}
59+
60+
@Test
61+
public void testGetBeanNamesForType() throws Exception {
62+
final String[] result = defaultListableBeanFactory.getBeanNamesForType(BaseService.class);
63+
assertThat(result).isEmpty();
64+
}
65+
66+
@Test
67+
public void testGetBeansOfType() throws Exception {
68+
final Map<String, BaseService> result = defaultListableBeanFactory.getBeansOfType(BaseService.class);
69+
for (final Map.Entry<String, BaseService> entry : result.entrySet()) {
70+
final BaseService baseService = (BaseService)defaultListableBeanFactory.getBean(entry.getKey());
71+
System.out.println(entry.getValue());
72+
System.out.println(baseService);
73+
assertThat(baseService).isEqualTo(entry.getValue());
74+
}
75+
}
76+
77+
@Test
78+
public void testAddBeanPostProcessor() {
79+
final AutowiredAnnotationBeanPostProcessor r = new AutowiredAnnotationBeanPostProcessor();
80+
defaultListableBeanFactory.addBeanPostProcessor(r);
81+
assertThat(defaultListableBeanFactory.getBeanPostProcessors().contains(r)).isTrue();
82+
final int result = defaultListableBeanFactory.getBeanPostProcessorCount();
83+
Assert.assertEquals(1, result);
84+
}
85+
86+
@Test
87+
public void testApplyBeanPostProcessorsBeforeInitialization() throws Exception {
88+
defaultListableBeanFactory.registerBean("autowiredService",new AutowiredService());
89+
final BaseService base = new BaseService();
90+
final Object result = defaultListableBeanFactory.applyBeanPostProcessorsBeforeInitialization(base, "baseService10");
91+
Assert.assertEquals(base, result);
92+
}
93+
94+
@Test
95+
public void testApplyBeanPostProcessorsAfterInitialization() throws Exception {
96+
// applyBeanPostProcessorsAfterInitialization目前是空实现,但是由于不存在BeanPostProcessor,所以会返回入参
97+
final BaseService baseService = new BaseService();
98+
final Object result = defaultListableBeanFactory.applyBeanPostProcessorsAfterInitialization(baseService, "baseService10");
99+
assertThat(result).isEqualTo(baseService);
100+
}
101+
102+
// @Test
103+
// public void testRegisterDependentBean() throws Exception {
104+
105+
// }
106+
107+
@Test
108+
public void testGetDependentBeans() throws Exception {
109+
final String[] result = defaultListableBeanFactory.getDependentBeans("beanName");
110+
Assert.assertArrayEquals(new String[]{}, result);
111+
}
112+
113+
@Test
114+
public void testGetDependenciesForBean() throws Exception {
115+
final String[] result = defaultListableBeanFactory.getDependenciesForBean("beanName");
116+
Assert.assertArrayEquals(new String[]{}, result);
117+
}
118+
119+
120+
@Test
121+
public void testGetBean() throws Exception {
122+
final Object result = defaultListableBeanFactory.getBean("baseService1");
123+
assertThat(result).isNotNull();
124+
}
125+
126+
@Test
127+
public void testContainsBean() throws Exception {
128+
final boolean result = defaultListableBeanFactory.containsBean("baseService1");
129+
Assert.assertTrue(result);
130+
}
131+
132+
@Test
133+
public void testIsSingleton() throws Exception {
134+
final boolean result = defaultListableBeanFactory.isSingleton("baseService1");
135+
Assert.assertTrue(result);
136+
}
137+
138+
@Test
139+
public void testIsPrototype() throws Exception {
140+
final boolean result = defaultListableBeanFactory.isPrototype("baseService1");
141+
Assert.assertFalse(result);
142+
}
143+
144+
}

src/test/java/com/dianpoint/summer/test/beans/SimpleBeanFactoryRegistryTest.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.dianpoint.summer.test.beans;
22

3-
import com.dianpoint.summer.beans.factory.BeanFactory;
43
import com.dianpoint.summer.beans.factory.config.SingletonBeanRegistry;
54
import com.dianpoint.summer.beans.factory.support.DefaultListableBeanFactory;
65
import org.junit.Test;
@@ -20,8 +19,6 @@
2019
*/
2120
public class SimpleBeanFactoryRegistryTest extends AbstractBeanRegistryTest {
2221

23-
private final String LOCK = this.getClass().getName() + "_LOCK";
24-
2522
DefaultListableBeanFactory defaultListableBeanFactory = new DefaultListableBeanFactory();
2623

2724
/**
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.dianpoint.summer.test.event;
2+
3+
/**
4+
* @author wangyi
5+
* @date 2023/3/30
6+
*/
7+
public class EventThreadLocal {
8+
static ThreadLocal<String> tl = new ThreadLocal<>();
9+
10+
public static String getValue() {
11+
return tl.get();
12+
}
13+
14+
public static void addValue(final String value) {
15+
tl.set(value);
16+
}
17+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.dianpoint.summer.test.event;
2+
3+
import com.dianpoint.summer.context.ApplicationEvent;
4+
import com.dianpoint.summer.context.ApplicationListener;
5+
import com.dianpoint.summer.context.SimpleApplicationEventPublisher;
6+
import org.junit.BeforeClass;
7+
import org.junit.Test;
8+
9+
/**
10+
* @author wangyi
11+
* @date 2023/3/30
12+
*/
13+
public class SimpleApplicationEventPublisherTest {
14+
15+
static SimpleApplicationEventPublisher simpleApplicationEventPublisher;
16+
17+
@BeforeClass
18+
public static void setUp() {
19+
simpleApplicationEventPublisher = new SimpleApplicationEventPublisher();
20+
simpleApplicationEventPublisher.addApplicationListener(new ApplicationListener());
21+
}
22+
23+
@Test
24+
public void testPublisher() throws Exception {
25+
simpleApplicationEventPublisher.publisher(new ApplicationEvent("event"));
26+
}
27+
28+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.dianpoint.summer.test.event;
2+
3+
import com.dianpoint.summer.context.ApplicationEvent;
4+
import com.dianpoint.summer.context.ApplicationListener;
5+
6+
7+
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
8+
9+
/**
10+
* @author wangyi
11+
* @date 2023/3/30
12+
*/
13+
public class TestEventListener extends ApplicationListener {
14+
15+
void onApplicationEvent(ApplicationEvent event) {
16+
String value = EventThreadLocal.getValue();
17+
String eventValue = event.getSource().toString();
18+
assertThat(value).isEqualTo(eventValue);
19+
}
20+
}

0 commit comments

Comments
 (0)