Skip to content

Commit 2f3d9aa

Browse files
committed
[#11] Update 参数解析器以及响应处理器的容器
1 parent 2eb4ead commit 2f3d9aa

8 files changed

+185
-42
lines changed

sky-http-springboot-starter/src/main/java/sky/SkyHttpServerAutoConfiguration.java

+20-30
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package sky;
22

33
import http.HttpServer;
4-
import io.github.fzdwx.lambada.Collections;
54
import io.github.fzdwx.lambada.http.Router;
65
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
76
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
@@ -11,24 +10,23 @@
1110
import org.springframework.context.annotation.Configuration;
1211
import org.springframework.context.annotation.Primary;
1312
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
14-
import sky.starter.DispatchHandler;
15-
import sky.starter.SkyHandlerMappingContainer;
16-
import sky.starter.SkyWebServer;
17-
import sky.starter.SkyWebServerFactory;
13+
import sky.starter.bean.DispatchHandler;
14+
import sky.starter.bean.RequestArgumentResolverContainer;
15+
import sky.starter.bean.RequestResultHandlerContainer;
16+
import sky.starter.bean.SkyHandlerMappingContainer;
17+
import sky.starter.bean.SkyWebServer;
18+
import sky.starter.bean.SkyWebServerFactory;
1819
import sky.starter.domain.SkyRouteDefinition;
1920
import sky.starter.ext.EveryRequestResultHandler;
2021
import sky.starter.ext.HandlerMappingContainer;
2122
import sky.starter.ext.PathVariableResolver;
22-
import sky.starter.ext.RequestArgumentResolver;
23-
import sky.starter.ext.RequestResultHandler;
2423
import sky.starter.ext.ResponseBodyRequestResultHandler;
2524
import sky.starter.props.SkyHttpServerProps;
2625
import sky.starter.unsupport.SkyDispatcherServletPath;
2726
import sky.starter.unsupport.SkyServletContext;
2827
import sky.starter.util.SkyBanner;
2928

3029
import javax.servlet.ServletContext;
31-
import java.util.List;
3230

3331
/**
3432
* sky http server auto configuration.
@@ -54,34 +52,25 @@ public SkyHttpServerAutoConfiguration(final SkyHttpServerProps skyHttpServerProp
5452
*/
5553
@Bean
5654
@ConditionalOnMissingBean
57-
SkyWebServerFactory SkyWebServerFactory(
58-
WebMvcConfigurationSupport webMvcConfigurationSupport,
59-
HttpServer httpServer,
60-
DispatchHandler dispatchHandler) {
55+
SkyWebServerFactory SkyWebServerFactory(WebMvcConfigurationSupport webMvcConfigurationSupport, HttpServer httpServer,
56+
DispatchHandler dispatchHandler) {
6157

6258
webMvcConfigurationSupport.setServletContext(servletContext());
6359

64-
return new SkyWebServerFactory(
65-
httpServer,
66-
skyHttpServerProps,
67-
dispatchHandler);
60+
return new SkyWebServerFactory(httpServer, skyHttpServerProps, dispatchHandler);
6861
}
6962

7063
@Bean
71-
@ConditionalOnMissingBean
72-
List<RequestResultHandler> resultHandlers() {
73-
return Collections.list(
74-
new ResponseBodyRequestResultHandler(),
75-
new EveryRequestResultHandler()
76-
);
64+
RequestArgumentResolverContainer requestArgumentResolverContainer() {
65+
return new RequestArgumentResolverContainer()
66+
.add(new PathVariableResolver());
7767
}
7868

7969
@Bean
80-
@ConditionalOnMissingBean
81-
List<RequestArgumentResolver> argumentResolvers() {
82-
return Collections.list(
83-
new PathVariableResolver()
84-
);
70+
RequestResultHandlerContainer requestResultHandlerContainer() {
71+
return new RequestResultHandlerContainer()
72+
.add(new ResponseBodyRequestResultHandler())
73+
.add(new EveryRequestResultHandler());
8574
}
8675

8776
/**
@@ -101,9 +90,10 @@ HandlerMappingContainer<?> container(Router<SkyRouteDefinition> router) {
10190
*/
10291
@Bean
10392
@ConditionalOnMissingBean
104-
DispatchHandler dispatchHandler(
105-
Router<SkyRouteDefinition> router) {
106-
return new DispatchHandler(router, resultHandlers(), argumentResolvers());
93+
DispatchHandler dispatchHandler(Router<SkyRouteDefinition> router, RequestResultHandlerContainer requestResultHandlerContainer,
94+
RequestArgumentResolverContainer requestArgumentResolverContainer) {
95+
96+
return new DispatchHandler(router, requestResultHandlerContainer, requestArgumentResolverContainer);
10797
}
10898

10999
/**

sky-http-springboot-starter/src/main/java/sky/starter/DispatchHandler.java sky-http-springboot-starter/src/main/java/sky/starter/bean/DispatchHandler.java

+8-9
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
package sky.starter;
1+
package sky.starter.bean;
22

33
import http.HttpServerRequest;
44
import http.HttpServerResponse;
55
import http.ext.HttpHandler;
6-
import io.github.fzdwx.lambada.Seq;
76
import io.github.fzdwx.lambada.http.HttpPath;
87
import io.github.fzdwx.lambada.http.Router;
98
import io.netty.handler.codec.http.HttpResponseStatus;
@@ -14,7 +13,7 @@
1413
import sky.starter.ext.RequestArgumentResolver;
1514
import sky.starter.ext.RequestResultHandler;
1615

17-
import java.util.List;
16+
import java.util.Collection;
1817

1918
/**
2019
* dispatch handler.
@@ -27,15 +26,15 @@ public class DispatchHandler implements HttpHandler {
2726

2827
static Object[] EMPTY_ARGS = new Object[0];
2928
private final Router<SkyRouteDefinition> router;
30-
private final List<RequestResultHandler> resultHandlers;
31-
private final List<RequestArgumentResolver> argumentResolvers;
29+
private final Collection<RequestResultHandler> resultHandlers;
30+
private final Collection<RequestArgumentResolver> argumentResolvers;
3231

3332
public DispatchHandler(final Router<SkyRouteDefinition> router,
34-
final List<RequestResultHandler> resultHandlers,
35-
final List<RequestArgumentResolver> argumentResolvers) {
33+
final RequestResultHandlerContainer resultHandlers,
34+
final RequestArgumentResolverContainer argumentResolvers) {
3635
this.router = router;
37-
this.resultHandlers = Seq.sort(resultHandlers, RequestResultHandler.sort);
38-
this.argumentResolvers = argumentResolvers;
36+
this.resultHandlers = resultHandlers.container();
37+
this.argumentResolvers = argumentResolvers.container();
3938
}
4039

4140
@SneakyThrows
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package sky.starter.bean;
2+
3+
import sky.starter.ext.RequestArgumentResolver;
4+
import sky.starter.ext.SomeContainer;
5+
6+
import java.util.Collection;
7+
import java.util.HashSet;
8+
9+
/**
10+
* request argument resolver container
11+
* <p>
12+
* you can inject this Container to add your own RequestArgumentResolver.
13+
*
14+
* @author <a href="mailto:likelovec@gmail.com">fzdwx</a>
15+
* @date 2022/5/19 21:49
16+
*/
17+
public class RequestArgumentResolverContainer extends SomeContainer<RequestArgumentResolver> {
18+
19+
public RequestArgumentResolverContainer() {
20+
super(new HashSet<>());
21+
}
22+
23+
@Override
24+
public RequestArgumentResolverContainer add(final RequestArgumentResolver requestArgumentResolver) {
25+
super.add(requestArgumentResolver);
26+
return this;
27+
}
28+
29+
@Override
30+
public RequestArgumentResolverContainer add(final RequestArgumentResolver... some) {
31+
super.add(some);
32+
return this;
33+
}
34+
35+
36+
@Override
37+
public RequestArgumentResolverContainer addAll(final Collection<RequestArgumentResolver> requestArgumentResolvers) {
38+
super.addAll(requestArgumentResolvers);
39+
return this;
40+
}
41+
42+
@Override
43+
public RequestArgumentResolverContainer impl() {
44+
return this;
45+
}
46+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package sky.starter.bean;
2+
3+
import sky.starter.ext.RequestResultHandler;
4+
import sky.starter.ext.SomeContainer;
5+
6+
import java.util.Collection;
7+
import java.util.TreeSet;
8+
9+
/**
10+
* is RequestResultHandler container.
11+
* <p>
12+
* you can inject this Container to add your own RequestResultHandler.
13+
*
14+
* @author <a href="mailto:likelovec@gmail.com">fzdwx</a>
15+
* @date 2022/5/19 21:52
16+
*/
17+
public class RequestResultHandlerContainer extends SomeContainer<RequestResultHandler> {
18+
19+
public RequestResultHandlerContainer() {
20+
super(new TreeSet<>());
21+
}
22+
23+
@Override
24+
public RequestResultHandlerContainer add(final RequestResultHandler requestResultHandler) {
25+
super.add(requestResultHandler);
26+
return this;
27+
}
28+
29+
@Override
30+
public RequestResultHandlerContainer add(final RequestResultHandler... some) {
31+
super.add(some);
32+
return this;
33+
}
34+
35+
36+
@Override
37+
public RequestResultHandlerContainer addAll(final Collection<RequestResultHandler> requestResultHandlers) {
38+
super.addAll(requestResultHandlers);
39+
return this;
40+
}
41+
42+
@Override
43+
public RequestResultHandlerContainer impl() {
44+
return this;
45+
}
46+
}

sky-http-springboot-starter/src/main/java/sky/starter/SkyHandlerMappingContainer.java sky-http-springboot-starter/src/main/java/sky/starter/bean/SkyHandlerMappingContainer.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package sky.starter;
1+
package sky.starter.bean;
22

33
import io.github.fzdwx.lambada.http.Router;
44
import org.springframework.core.annotation.AnnotatedElementUtils;

sky-http-springboot-starter/src/main/java/sky/starter/SkyWebServer.java sky-http-springboot-starter/src/main/java/sky/starter/bean/SkyWebServer.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package sky.starter;
1+
package sky.starter.bean;
22

33
import http.HttpServer;
44
import lombok.extern.slf4j.Slf4j;

sky-http-springboot-starter/src/main/java/sky/starter/SkyWebServerFactory.java sky-http-springboot-starter/src/main/java/sky/starter/bean/SkyWebServerFactory.java

+12-1
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
package sky.starter;
1+
package sky.starter.bean;
22

33
import http.HttpServer;
44
import org.springframework.boot.web.server.ConfigurableWebServerFactory;
55
import org.springframework.boot.web.server.WebServer;
66
import org.springframework.boot.web.servlet.ServletContextInitializer;
77
import org.springframework.boot.web.servlet.server.AbstractServletWebServerFactory;
88
import org.springframework.context.ResourceLoaderAware;
9+
import org.springframework.context.event.EventListener;
910
import org.springframework.core.io.ResourceLoader;
1011
import sky.starter.props.SkyHttpServerProps;
1112

@@ -30,6 +31,16 @@ public SkyWebServerFactory(final HttpServer httpServer,
3031
this.dispatchHandler = dispatchHandler;
3132
}
3233

34+
@EventListener
35+
public void test2(RequestResultHandlerContainer event) {
36+
System.out.println(event);
37+
}
38+
39+
@EventListener
40+
public void test3(RequestArgumentResolverContainer event) {
41+
System.out.println(event);
42+
}
43+
3344
@Override
3445
public WebServer getWebServer(final ServletContextInitializer... initializers) {
3546
return getSkyWebServer(initializers);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package sky.starter.ext;
2+
3+
import io.github.fzdwx.lambada.Collections;
4+
5+
import java.util.Arrays;
6+
import java.util.Collection;
7+
8+
/**
9+
* @author <a href="mailto:likelovec@gmail.com">fzdwx</a>
10+
* @date 2022/5/19 22:01
11+
*/
12+
public abstract class SomeContainer<Some>{
13+
14+
Collection<Some> container;
15+
16+
protected SomeContainer(final Collection<Some> container) {
17+
this.container = container;
18+
}
19+
20+
public SomeContainer<Some> add(Some some) {
21+
if (some != null) {
22+
container.add(some);
23+
}
24+
return impl();
25+
}
26+
27+
public SomeContainer<Some> add(Some... some) {
28+
if (some != null) {
29+
container.addAll(Arrays.asList(some));
30+
}
31+
return impl();
32+
}
33+
34+
public SomeContainer<Some> addAll(Collection<Some> somes) {
35+
if (somes != null) {
36+
this.container.addAll(somes);
37+
}
38+
return impl();
39+
}
40+
41+
public abstract SomeContainer<Some> impl();
42+
43+
/**
44+
* unmodifiable.
45+
*
46+
* @return {@link Collection }<{@link Some }>
47+
*/
48+
public final Collection<Some> container() {
49+
return Collections.unmodifiable(container);
50+
}
51+
}

0 commit comments

Comments
 (0)