Skip to content

Commit 6757d03

Browse files
authored
Merge pull request #296 from lets-blade/dev
Dev
2 parents e6096d5 + 130b89a commit 6757d03

36 files changed

+709
-215
lines changed

README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -64,14 +64,14 @@ Run with `Maven`:
6464
<dependency>
6565
<groupId>com.bladejava</groupId>
6666
<artifactId>blade-mvc</artifactId>
67-
<version>2.0.12.ALPHA</version>
67+
<version>2.0.12.BETA</version>
6868
</dependency>
6969
```
7070

7171
or `Gradle`:
7272

7373
```sh
74-
compile 'com.bladejava:blade-mvc:2.0.12.ALPHA'
74+
compile 'com.bladejava:blade-mvc:2.0.12.BETA'
7575
```
7676

7777
Write the `main` method and the `Hello World`:

README_CN.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@
6161
<dependency>
6262
<groupId>com.bladejava</groupId>
6363
<artifactId>blade-mvc</artifactId>
64-
<version>2.0.12.ALPHA</version>
64+
<version>2.0.12.BETA</version>
6565
</dependency>
6666
```
6767

@@ -70,7 +70,7 @@
7070
或者 `Gradle`:
7171

7272
```sh
73-
compile 'com.bladejava:blade-mvc:2.0.12.ALPHA'
73+
compile 'com.bladejava:blade-mvc:2.0.12.BETA'
7474
```
7575

7676
编写 `main` 函数写一个 `Hello World`

pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
<groupId>com.bladejava</groupId>
77
<artifactId>blade-mvc</artifactId>
8-
<version>2.0.12.ALPHA</version>
8+
<version>2.0.12.BETA</version>
99
<packaging>jar</packaging>
1010

1111
<name>blade</name>

src/main/java/com/blade/Blade.java

+14-1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import com.blade.mvc.route.RouteMatcher;
3636
import com.blade.mvc.ui.template.DefaultEngine;
3737
import com.blade.mvc.ui.template.TemplateEngine;
38+
import com.blade.security.web.cors.CorsConfiger;
3839
import com.blade.security.web.cors.CorsMiddleware;
3940
import com.blade.server.Server;
4041
import com.blade.server.netty.NettyServer;
@@ -534,9 +535,20 @@ public Class<?> bootClass() {
534535
* @return blade
535536
*/
536537
public Blade enableCors(boolean enableCors) {
538+
this.enableCors(enableCors, new CorsConfiger());
539+
return this;
540+
}
541+
542+
/**
543+
* Set whether to config cors
544+
* @param enableCors enable cors
545+
* @param corsConfig config cors
546+
* @return blade
547+
*/
548+
public Blade enableCors(boolean enableCors, CorsConfiger corsConfig) {
537549
this.environment.set(ENV_KEY_CORS_ENABLE, enableCors);
538550
if (enableCors) {
539-
this.use(new CorsMiddleware());
551+
this.use(new CorsMiddleware(corsConfig));
540552
}
541553
return this;
542554
}
@@ -841,6 +853,7 @@ public Blade start(Class<?> mainCls, String... args) {
841853

842854
this.bootClass = mainCls;
843855
eventManager.fireEvent(EventType.SERVER_STARTING, new Event().attribute("blade", this));
856+
844857
Thread thread = new Thread(() -> {
845858
try {
846859
server.start(Blade.this);

src/main/java/com/blade/ioc/Injector.java

+2
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,6 @@ public interface Injector {
1515
*/
1616
void injection(Object bean);
1717

18+
void injection(Object bean, Object value);
19+
1820
}

src/main/java/com/blade/ioc/Ioc.java

+2
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ public interface Ioc {
3737
*/
3838
<T> T addBean(Class<T> type);
3939

40+
Object createBean(Class<?> type);
41+
4042
/**
4143
* Set bean, e.g aop proxy
4244
*

src/main/java/com/blade/ioc/SimpleIoc.java

+34-18
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package com.blade.ioc;
22

3+
import com.blade.ioc.annotation.Bean;
34
import com.blade.ioc.bean.BeanDefine;
5+
import com.blade.kit.IocKit;
6+
import com.blade.mvc.WebContext;
47
import lombok.extern.slf4j.Slf4j;
58

69
import java.util.*;
@@ -30,12 +33,12 @@ public void addBean(Object bean) {
3033
@Override
3134
public void addBean(String name, Object bean) {
3235
BeanDefine beanDefine = new BeanDefine(bean);
33-
addBean(name, beanDefine);
34-
// add interface
36+
put(name, beanDefine);
37+
// add interface、put to pool
3538
Class<?>[] interfaces = beanDefine.getType().getInterfaces();
3639
if (interfaces.length > 0) {
3740
for (Class<?> interfaceClazz : interfaces) {
38-
this.addBean(interfaceClazz.getName(), beanDefine);
41+
this.put(interfaceClazz.getName(), beanDefine);
3942
}
4043
}
4144
}
@@ -59,8 +62,21 @@ public void setBean(Class<?> type, Object proxyBean) {
5962
*/
6063
@Override
6164
public <T> T addBean(Class<T> type) {
62-
Object bean = addBean(type, true);
63-
return type.cast(bean);
65+
Bean beanAnnotation = type.getAnnotation(Bean.class);
66+
boolean isSingleton = null == beanAnnotation || beanAnnotation.singleton();
67+
if (isSingleton) {
68+
Object bean = put(type, true);
69+
return type.cast(bean);
70+
}
71+
return null;
72+
}
73+
74+
@Override
75+
public Object createBean(Class<?> type) {
76+
BeanDefine beanDefine = createBeanDefine(type, true);
77+
IocKit.initInjection(this, Objects.requireNonNull(beanDefine));
78+
IocKit.injectionValue(WebContext.blade().environment(), beanDefine);
79+
return beanDefine.getBean();
6480
}
6581

6682
@Override
@@ -69,7 +85,7 @@ public <T> T getBean(Class<T> type) {
6985
try {
7086
return type.cast(bean);
7187
} catch (Exception e) {
72-
e.printStackTrace();
88+
log.error("get bean error", e);
7389
}
7490
return null;
7591
}
@@ -90,7 +106,7 @@ public List<BeanDefine> getBeanDefines() {
90106

91107
@Override
92108
public BeanDefine getBeanDefine(Class<?> type) {
93-
return this.getBeanDefine(type, true);
109+
return pool.get(type.getName());
94110
}
95111

96112
@Override
@@ -129,7 +145,7 @@ public void clearAll() {
129145
/**
130146
* Add user-defined objects
131147
*/
132-
private void addBean(String name, BeanDefine beanDefine) {
148+
private void put(String name, BeanDefine beanDefine) {
133149
if (pool.put(name, beanDefine) != null) {
134150
log.warn("Duplicated Bean: {}", name);
135151
}
@@ -138,40 +154,40 @@ private void addBean(String name, BeanDefine beanDefine) {
138154
/**
139155
* Register @Bean marked objects
140156
*/
141-
private Object addBean(Class<?> type, boolean singleton) {
142-
return addBean(type.getName(), type, singleton);
157+
private Object put(Class<?> type, boolean isSingleton) {
158+
return put(type.getName(), type, isSingleton);
143159
}
144160

145161
/**
146162
* Register @Bean marked objects
147163
*/
148-
private Object addBean(String name, Class<?> beanClass, boolean singleton) {
149-
BeanDefine beanDefine = this.getBeanDefine(beanClass, singleton);
164+
private Object put(String name, Class<?> beanClass, boolean isSingleton) {
165+
BeanDefine beanDefine = this.createBeanDefine(beanClass, isSingleton);
150166

151167
if (pool.put(name, beanDefine) != null) {
152168
log.warn("Duplicated Bean: {}", name);
153169
}
154170

155-
// add interface
171+
// add interface、put to pool
156172
Class<?>[] interfaces = beanClass.getInterfaces();
157173
if (interfaces.length > 0) {
158174
for (Class<?> interfaceClazz : interfaces) {
159175
if (null != this.getBean(interfaceClazz)) {
160176
break;
161177
}
162-
this.addBean(interfaceClazz.getName(), beanDefine);
178+
this.put(interfaceClazz.getName(), beanDefine);
163179
}
164180
}
165181

166-
return beanDefine.getBean();
182+
return Objects.requireNonNull(beanDefine).getBean();
167183
}
168184

169-
private BeanDefine getBeanDefine(Class<?> beanClass, boolean singleton) {
185+
private BeanDefine createBeanDefine(Class<?> beanClass, boolean isSingleton) {
170186
try {
171187
Object object = beanClass.newInstance();
172-
return new BeanDefine(object, beanClass, singleton);
188+
return new BeanDefine(object, beanClass, isSingleton);
173189
} catch (InstantiationException | IllegalAccessException e) {
174-
e.printStackTrace();
190+
log.error("get BeanDefine error", e);
175191
}
176192
return null;
177193
}

src/main/java/com/blade/ioc/annotation/Bean.java

+2
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,6 @@
1515

1616
String value() default "";
1717

18+
boolean singleton() default true;
19+
1820
}

src/main/java/com/blade/ioc/annotation/Inject.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import java.lang.annotation.Target;
77

88
/**
9-
* Automatic injection
9+
* Automatic initInjection
1010
*
1111
* @author <a href="mailto:[email protected]" target="_blank">biezhi</a>
1212
* @since 1.5
@@ -17,4 +17,6 @@
1717

1818
String value() default "";
1919

20+
boolean singleton() default true;
21+
2022
}

src/main/java/com/blade/ioc/bean/BeanDefine.java

+17-9
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,10 @@
88
*/
99
public class BeanDefine {
1010

11-
private Object bean;
11+
private Object bean;
1212
private Class<?> type;
13-
private boolean isSingle;
13+
private boolean isSingleton;
14+
private boolean fieldHasPrototype;
1415

1516
public BeanDefine(Object bean) {
1617
this(bean, bean.getClass());
@@ -19,13 +20,13 @@ public BeanDefine(Object bean) {
1920
public BeanDefine(Object bean, Class<?> type) {
2021
this.bean = bean;
2122
this.type = type;
22-
this.isSingle = true;
23+
this.isSingleton = true;
2324
}
2425

25-
public BeanDefine(Object bean, Class<?> type, boolean isSingle) {
26+
public BeanDefine(Object bean, Class<?> type, boolean isSingleton) {
2627
this.bean = bean;
2728
this.type = type;
28-
this.isSingle = isSingle;
29+
this.isSingleton = isSingleton;
2930
}
3031

3132
public Object getBean() {
@@ -44,12 +45,19 @@ public void setType(Class<?> type) {
4445
this.type = type;
4546
}
4647

47-
public boolean isSingle() {
48-
return isSingle;
48+
public boolean isSingleton() {
49+
return isSingleton;
4950
}
5051

51-
public void setSignle(boolean isSingle) {
52-
this.isSingle = isSingle;
52+
public void setSingleton(boolean isSingleton) {
53+
this.isSingleton = isSingleton;
5354
}
5455

56+
public boolean isFieldHasPrototype() {
57+
return fieldHasPrototype;
58+
}
59+
60+
public void setFieldHasPrototype(boolean fieldHasPrototype) {
61+
this.fieldHasPrototype = fieldHasPrototype;
62+
}
5563
}

src/main/java/com/blade/ioc/bean/ClassDefine.java

+3-9
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
public final class ClassDefine {
1212

13-
private static final ConcurrentHashMap<Class<?>, ClassDefine> pool = new ConcurrentHashMap<Class<?>, ClassDefine>(128);
13+
private static final ConcurrentHashMap<Class<?>, ClassDefine> pool = new ConcurrentHashMap<>(128);
1414

1515
private final Class<?> clazz;
1616

@@ -54,13 +54,12 @@ public List<ClassDefine> getInterfaces() {
5454
return Collections.emptyList();
5555
}
5656
List<ClassDefine> results = new ArrayList<>(interfaces.length);
57-
for (Class<?> intf : interfaces) {
58-
results.add(ClassDefine.create(intf));
57+
for (Class<?> interface_ : interfaces) {
58+
results.add(ClassDefine.create(interface_));
5959
}
6060
return results;
6161
}
6262

63-
// ------------------------------------------------------------------
6463
public Annotation[] getAnnotations() {
6564
return clazz.getAnnotations();
6665
}
@@ -69,15 +68,10 @@ public <T extends Annotation> T getAnnotation(Class<T> annotationClass) {
6968
return clazz.getAnnotation(annotationClass);
7069
}
7170

72-
public <T extends Annotation> boolean isAnnotationPresent(Class<T> annotationClass) {
73-
return clazz.isAnnotationPresent(annotationClass);
74-
}
75-
7671
public Field[] getDeclaredFields() {
7772
return clazz.getDeclaredFields();
7873
}
7974

80-
// ------------------------------------------------------------------
8175
public int getModifiers() {
8276
return clazz.getModifiers();
8377
}

src/main/java/com/blade/ioc/bean/FieldInjector.java

+22
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.blade.ioc.Injector;
44
import com.blade.ioc.Ioc;
5+
import com.blade.kit.IocKit;
56

67
import java.lang.reflect.Field;
78

@@ -21,6 +22,14 @@ public FieldInjector(Ioc ioc, Field field) {
2122
this.field = field;
2223
}
2324

25+
public Class<?> getType() {
26+
return field.getType();
27+
}
28+
29+
public boolean isSingleton() {
30+
return IocKit.isSingleton(field.getType());
31+
}
32+
2433
@Override
2534
public void injection(Object bean) {
2635
try {
@@ -29,11 +38,24 @@ public void injection(Object bean) {
2938
if (value == null) {
3039
throw new IllegalStateException("Can't inject bean: " + fieldType.getName() + " for field: " + field);
3140
}
41+
injection(bean, value);
42+
} catch (Exception e) {
43+
throw new RuntimeException(e);
44+
}
45+
}
46+
47+
@Override
48+
public void injection(Object bean, Object value) {
49+
try {
3250
field.setAccessible(true);
3351
field.set(bean, value);
3452
} catch (Exception e) {
3553
throw new RuntimeException(e);
3654
}
3755
}
3856

57+
public boolean hasInjectFields() {
58+
return field.getType().getDeclaredFields().length > 0;
59+
}
60+
3961
}

0 commit comments

Comments
 (0)