Skip to content

Commit 251fb74

Browse files
authored
Merge branch 'dianpoint:main' into main
2 parents 0b34a5f + 7077f9e commit 251fb74

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+1503
-128
lines changed

pom.xml

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
<maven.compiler.source>8</maven.compiler.source>
1313
<maven.compiler.target>8</maven.compiler.target>
1414
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
15+
<fasterxml.jackson.version>2.14.2</fasterxml.jackson.version>
1516
</properties>
1617

1718
<dependencies>
@@ -21,9 +22,70 @@
2122
<artifactId>dom4j</artifactId>
2223
<version>2.1.4</version>
2324
</dependency>
25+
<dependency>
26+
<groupId>com.fasterxml.jackson.core</groupId>
27+
<artifactId>jackson-core</artifactId>
28+
<version>${fasterxml.jackson.version}</version>
29+
</dependency>
30+
<dependency>
31+
<groupId>com.fasterxml.jackson.core</groupId>
32+
<artifactId>jackson-databind</artifactId>
33+
<version>${fasterxml.jackson.version}</version>
34+
</dependency>
35+
<dependency>
36+
<groupId>com.fasterxml.jackson.core</groupId>
37+
<artifactId>jackson-annotations</artifactId>
38+
<version>${fasterxml.jackson.version}</version>
39+
</dependency>
40+
<dependency>
41+
<groupId>com.fasterxml.jackson.datatype</groupId>
42+
<artifactId>jackson-datatype-jdk8</artifactId>
43+
<version>${fasterxml.jackson.version}</version>
44+
</dependency>
45+
<dependency>
46+
<groupId>com.fasterxml.jackson.datatype</groupId>
47+
<artifactId>jackson-datatype-jsr310</artifactId>
48+
<version>${fasterxml.jackson.version}</version>
49+
</dependency>
50+
51+
52+
<!--test-->
53+
<dependency>
54+
<groupId>junit</groupId>
55+
<artifactId>junit</artifactId>
56+
<version>4.13.2</version>
57+
<scope>test</scope>
58+
</dependency>
59+
<dependency>
60+
<groupId>org.assertj</groupId>
61+
<artifactId>assertj-core</artifactId>
62+
<version>3.24.2</version>
63+
<scope>test</scope>
64+
</dependency>
65+
2466

2567
</dependencies>
2668

69+
<build>
70+
<plugins>
71+
<plugin>
72+
<groupId>org.apache.maven.plugins</groupId>
73+
<artifactId>maven-compiler-plugin</artifactId>
74+
<version>3.11.0</version>
75+
<configuration>
76+
<source>1.8</source>
77+
<target>1.8</target>
78+
<encoding>UTF-8</encoding>
79+
</configuration>
80+
</plugin>
81+
<plugin>
82+
<groupId>org.apache.maven.plugins</groupId>
83+
<artifactId>maven-source-plugin</artifactId>
84+
<version>3.2.1</version>
85+
</plugin>
86+
</plugins>
87+
</build>
88+
2789
<distributionManagement>
2890
<repository>
2991
<id>github</id>

src/main/java/com/dianpoint/summer/beans/ArgumentValues.java

Lines changed: 0 additions & 43 deletions
This file was deleted.

src/main/java/com/dianpoint/summer/beans/BeanFactory.java renamed to src/main/java/com/dianpoint/summer/beans/factory/BeanFactory.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
package com.dianpoint.summer.beans;
1+
package com.dianpoint.summer.beans.factory;
2+
3+
import com.dianpoint.summer.beans.BeansException;
24

35
/**
46
* <p>
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.dianpoint.summer.beans.factory;
2+
3+
import com.dianpoint.summer.beans.BeansException;
4+
5+
import java.util.Map;
6+
7+
/**
8+
* @author: congcong
9+
* @email: congccoder@gmail.com
10+
* @date: 2023/3/23 16:57
11+
*/
12+
public interface ListableBeanFactory extends BeanFactory {
13+
14+
boolean containsBeanDefinition(String beanName);
15+
16+
int getBeanDefinitionCount();
17+
18+
String[] getBeanDefinitionNames();
19+
20+
String[] getBeanNamesForType(Class<?> type);
21+
22+
<T> Map<String, T> getBeansOfType(Class<T> type) throws BeansException;
23+
24+
}

src/main/java/com/dianpoint/summer/beans/NoSuchBeanDefinitionException.java renamed to src/main/java/com/dianpoint/summer/beans/factory/NoSuchBeanDefinitionException.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.dianpoint.summer.beans;
1+
package com.dianpoint.summer.beans.factory;
22

33
/**
44
* @author: congcong
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.dianpoint.summer.beans.factory.annotation;
2+
3+
import java.lang.annotation.ElementType;
4+
import java.lang.annotation.Retention;
5+
import java.lang.annotation.RetentionPolicy;
6+
import java.lang.annotation.Target;
7+
8+
/**
9+
* <p>
10+
* 定义autowired注解进行反射处理,自动注入初始化Bean
11+
* </p>
12+
*
13+
* @author: congcong
14+
* @email: congccoder@gmail.com
15+
* @date: 2023/3/17 16:58
16+
*/
17+
@Target(ElementType.FIELD)
18+
@Retention(RetentionPolicy.RUNTIME)
19+
public @interface Autowired {
20+
21+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package com.dianpoint.summer.beans.factory.annotation;
2+
3+
import com.dianpoint.summer.beans.factory.BeanFactory;
4+
import com.dianpoint.summer.beans.BeansException;
5+
import com.dianpoint.summer.beans.factory.config.BeanPostProcessor;
6+
7+
import java.lang.reflect.Field;
8+
9+
/**
10+
* @author: github/ccoderJava
11+
* @email: congccoder@gmail.com
12+
* @date: 2023/3/21 22:33
13+
*/
14+
public class AutowiredAnnotationBeanPostProcessor implements BeanPostProcessor {
15+
16+
private BeanFactory beanFactory;
17+
18+
@Override
19+
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
20+
Object result = bean;
21+
Class<?> clazz = bean.getClass();
22+
Field[] fields = clazz.getDeclaredFields();
23+
for (Field field : fields) {
24+
boolean isAnnotation = field.isAnnotationPresent(Autowired.class);
25+
if (isAnnotation) {
26+
// 根据属性名称查找同名的bean
27+
String fieldName = field.getName();
28+
Object autowiredObject = this.getBeanFactory().getBean(fieldName);
29+
field.setAccessible(true);
30+
try {
31+
field.set(bean, autowiredObject);
32+
} catch (IllegalAccessException e) {
33+
e.printStackTrace();
34+
}
35+
}
36+
}
37+
return result;
38+
}
39+
40+
@Override
41+
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
42+
return null;
43+
}
44+
45+
@Override
46+
public void setBeanFactory(BeanFactory beanFactory) {
47+
this.beanFactory = beanFactory;
48+
}
49+
50+
public BeanFactory getBeanFactory() {
51+
return this.beanFactory;
52+
}
53+
54+
}
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package com.dianpoint.summer.beans.factory.config;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
import com.dianpoint.summer.beans.BeansException;
7+
import com.dianpoint.summer.beans.factory.annotation.Autowired;
8+
import com.dianpoint.summer.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor;
9+
import com.dianpoint.summer.beans.factory.support.AbstractBeanFactory;
10+
11+
/**
12+
* @author: github/ccoderJava
13+
* @email: congccoder@gmail.com
14+
* @date: 2023/3/21 22:35
15+
*/
16+
public abstract class AbstractAutowireCapableBeanFactory extends AbstractBeanFactory
17+
implements AutowireCapableBeanFactory {
18+
19+
private final List<BeanPostProcessor> beanPostProcessors = new ArrayList<>();
20+
21+
public List<BeanPostProcessor> getBeanPostProcessors() {
22+
return this.beanPostProcessors;
23+
}
24+
25+
@Override
26+
public void addBeanPostProcessor(BeanPostProcessor beanPostProcessor) {
27+
this.beanPostProcessors.remove(beanPostProcessor);
28+
this.beanPostProcessors.add(beanPostProcessor);
29+
}
30+
31+
@Override
32+
public int getBeanPostProcessorCount() {
33+
return this.beanPostProcessors.size();
34+
}
35+
36+
@Override
37+
public Object applyBeanPostProcessorsBeforeInitialization(Object existingBean, String beanName) {
38+
Object result = existingBean;
39+
for (BeanPostProcessor beanPostProcessor : this.getBeanPostProcessors()) {
40+
beanPostProcessor.setBeanFactory(this);
41+
try {
42+
result = beanPostProcessor.postProcessBeforeInitialization(result, beanName);
43+
if (result == null) {
44+
return null;
45+
}
46+
} catch (BeansException e) {
47+
e.printStackTrace();
48+
}
49+
}
50+
return result;
51+
}
52+
53+
@Override
54+
public Object applyBeanPostProcessorsAfterInitialization(Object existingBean, String beanName) {
55+
Object result = existingBean;
56+
for (BeanPostProcessor beanPostProcessor : getBeanPostProcessors()) {
57+
try {
58+
result = beanPostProcessor.postProcessAfterInitialization(result, beanName);
59+
if (result == null) {
60+
return null;
61+
}
62+
} catch (BeansException e) {
63+
e.printStackTrace();
64+
}
65+
}
66+
return result;
67+
}
68+
69+
@Override
70+
public void registerDependentBean(String beanName, String dependentBeanName) {
71+
72+
}
73+
74+
@Override
75+
public String[] getDependentBeans(String beanName) {
76+
return new String[0];
77+
}
78+
79+
@Override
80+
public String[] getDependenciesForBean(String beanName) {
81+
return new String[0];
82+
}
83+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.dianpoint.summer.beans.factory.config;
2+
3+
import com.dianpoint.summer.beans.factory.BeanFactory;
4+
5+
/**
6+
* @author: congcong
7+
* @email: congccoder@gmail.com
8+
* @date: 2023/3/23 17:04
9+
*/
10+
public interface AutowireCapableBeanFactory extends BeanFactory {
11+
12+
int AUTOWIRED_NO = 0;
13+
int AUTOWIRED_BY_NAME = 1;
14+
int AUTOWIRED_BY_TYPE = 2;
15+
16+
int AUTOWIRED_CONSTRUCTOR = 3;
17+
18+
Object applyBeanPostProcessorsBeforeInitialization(Object existingBean, String beanName);
19+
20+
Object applyBeanPostProcessorsAfterInitialization(Object existingBean, String beanName);
21+
22+
}

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

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
package com.dianpoint.summer.beans;
1+
package com.dianpoint.summer.beans.factory.config;
2+
3+
import com.dianpoint.summer.beans.PropertyValues;
4+
import com.dianpoint.summer.beans.factory.config.ConstructorArgumentValues;
25

36
/**
47
* <p>
@@ -15,7 +18,7 @@ public class BeanDefinition {
1518

1619
private boolean lazyInit = true;
1720
private String[] dependsOn;
18-
private ArgumentValues constructorArgumentValues;
21+
private ConstructorArgumentValues constructorArgumentValues;
1922
private PropertyValues propertyValues;
2023
private String initMethodName;
2124
private volatile Object beanClass;
@@ -45,11 +48,11 @@ public void setDependsOn(String... dependsOn) {
4548
this.dependsOn = dependsOn;
4649
}
4750

48-
public ArgumentValues getConstructorArgumentValues() {
51+
public ConstructorArgumentValues getConstructorArgumentValues() {
4952
return constructorArgumentValues;
5053
}
5154

52-
public void setConstructorArgumentValues(ArgumentValues constructorArgumentValues) {
55+
public void setConstructorArgumentValues(ConstructorArgumentValues constructorArgumentValues) {
5356
this.constructorArgumentValues = constructorArgumentValues;
5457
}
5558

0 commit comments

Comments
 (0)