Skip to content

Commit 8ac38c0

Browse files
committed
[#11] 实现收集所有controller,抽象出dispatch handler
1 parent 821d8ae commit 8ac38c0

13 files changed

+130
-236
lines changed

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

+55-6
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,23 @@
11
package sky;
22

3+
import http.HttpServer;
4+
import io.github.fzdwx.lambada.http.Router;
35
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
6+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
47
import org.springframework.boot.autoconfigure.web.servlet.DispatcherServletPath;
58
import org.springframework.boot.context.properties.EnableConfigurationProperties;
6-
import org.springframework.boot.web.servlet.server.AbstractServletWebServerFactory;
79
import org.springframework.context.annotation.Bean;
810
import org.springframework.context.annotation.Configuration;
911
import org.springframework.context.annotation.Primary;
12+
import org.springframework.web.method.HandlerMethod;
1013
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
11-
import sky.starter.HandlerMappingContainer;
1214
import sky.starter.SkyHandlerMappingContainer;
1315
import sky.starter.SkyWebServer;
1416
import sky.starter.SkyWebServerFactory;
17+
import sky.starter.ext.HandlerMappingContainer;
1518
import sky.starter.ext.SkyBanner;
1619
import sky.starter.props.SkyHttpServerProps;
20+
import sky.starter.unsupport.DispatchHandler;
1721
import sky.starter.unsupport.SkyDispatcherServletPath;
1822
import sky.starter.unsupport.SkyServletContext;
1923

@@ -42,17 +46,62 @@ public SkyHttpServerAutoConfiguration(final SkyHttpServerProps skyHttpServerProp
4246
* sky web server factory.
4347
*/
4448
@Bean
45-
AbstractServletWebServerFactory abstractServletWebServerFactory(WebMvcConfigurationSupport webMvcConfigurationSupport) {
49+
@ConditionalOnMissingBean
50+
SkyWebServerFactory SkyWebServerFactory(
51+
WebMvcConfigurationSupport webMvcConfigurationSupport,
52+
HttpServer httpServer) {
4653
webMvcConfigurationSupport.setServletContext(servletContext());
47-
return new SkyWebServerFactory(skyHttpServerProps.port);
54+
return new SkyWebServerFactory(skyHttpServerProps.port, httpServer, skyHttpServerProps);
4855
}
4956

5057
/**
5158
* handler mapping container.
5259
*/
5360
@Bean
54-
HandlerMappingContainer<?> container() {
55-
return new SkyHandlerMappingContainer(skyHttpServerProps);
61+
@ConditionalOnMissingBean
62+
HandlerMappingContainer<?> container(Router<HandlerMethod> router) {
63+
return new SkyHandlerMappingContainer(skyHttpServerProps, router);
64+
}
65+
66+
/**
67+
* dispatch handler.
68+
*
69+
* @param router router
70+
* @return {@link DispatchHandler }
71+
*/
72+
@Bean
73+
@ConditionalOnMissingBean
74+
DispatchHandler dispatchHandler(
75+
Router<HandlerMethod> router) {
76+
return new DispatchHandler(router);
77+
}
78+
79+
/**
80+
* router.
81+
* <p>
82+
* Save the processor corresponding to the route.
83+
*
84+
* @return {@link Router }<{@link HandlerMethod }>
85+
*/
86+
@Bean
87+
@ConditionalOnMissingBean
88+
Router<HandlerMethod> router() {
89+
return Router.router();
90+
}
91+
92+
/**
93+
* http server
94+
*
95+
* @param dispatchHandler dispatchHandler
96+
* @return {@link HttpServer }
97+
*/
98+
@Bean
99+
@ConditionalOnMissingBean
100+
HttpServer httpServer(
101+
DispatchHandler dispatchHandler) {
102+
// TODO: 2022/5/18 customize exception handler
103+
return HttpServer.create()
104+
.handle(dispatchHandler);
56105
}
57106

58107
/**

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

-17
This file was deleted.

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

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

3-
import io.github.fzdwx.lambada.http.HttpMethod;
43
import io.github.fzdwx.lambada.http.Router;
54
import org.springframework.util.ObjectUtils;
65
import org.springframework.util.StringUtils;
@@ -96,9 +95,7 @@ public SkyHandlerInfo combine(final SkyHandlerInfo other) {
9695
public void addToRouter(final Router<HandlerMethod> router, final HandlerMethod handlerMethod) {
9796
patterns.forEach(pattern -> {
9897
for (final RequestMethod method : this.methods) {
99-
final HttpMethod of = HttpMethod.of(method.name());
100-
// TODO: 2022/5/18
101-
// router.addRoute(of, pattern, handlerMethod);
98+
router.addRoute(method.name(), pattern.getPatternString(), handlerMethod);
10299
}
103100
});
104101
}

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

-26
This file was deleted.

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

+5-3
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,25 @@
77
import org.springframework.lang.Nullable;
88
import org.springframework.web.bind.annotation.RequestMapping;
99
import org.springframework.web.method.HandlerMethod;
10+
import sky.starter.ext.HandlerMappingContainer;
1011
import sky.starter.props.SkyHttpServerProps;
1112

1213
import java.lang.reflect.AnnotatedElement;
1314
import java.lang.reflect.Method;
1415

1516
/**
17+
* sky http handler container.
18+
*
1619
* @author <a href="mailto:likelovec@gmail.com">fzdwx</a>
1720
* @date 2022/5/17 22:04
1821
*/
1922
public class SkyHandlerMappingContainer extends HandlerMappingContainer<SkyHandlerInfo> {
2023

2124
final Router<HandlerMethod> router;
2225

23-
public SkyHandlerMappingContainer(final SkyHttpServerProps skyHttpServerProps) {
26+
public SkyHandlerMappingContainer(final SkyHttpServerProps skyHttpServerProps, final Router<HandlerMethod> router) {
2427
super(skyHttpServerProps);
25-
this.router = Router.router();
28+
this.router = router;
2629
}
2730

2831
@Override
@@ -46,7 +49,6 @@ protected HttpHandler getHandler(final HttpServerRequest request) {
4649
protected void registerHandlerMethod(final Object handler, final Method method, final SkyHandlerInfo mapping) {
4750
final HandlerMethod handlerMethod = createHandlerMethod(handler, method);
4851
mapping.addToRouter(router, handlerMethod);
49-
System.out.println("44");
5052
}
5153

5254
protected String[] resolveEmbeddedValuesInPatterns(String[] patterns) {

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

+16-3
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,45 @@
11
package sky.starter;
22

33
import http.HttpServer;
4+
import lombok.extern.slf4j.Slf4j;
45
import org.springframework.boot.web.server.WebServer;
56
import org.springframework.boot.web.server.WebServerException;
7+
import sky.starter.props.SkyHttpServerProps;
8+
9+
import static sky.starter.ext.Utils.DEBUG_PREFIX;
610

711
/**
812
* @author <a href="mailto:likelovec@gmail.com">fzdwx</a>
913
* @date 2022/5/16 21:00
1014
*/
15+
@Slf4j
1116
public class SkyWebServer implements WebServer {
1217

1318
private final HttpServer server;
14-
1519
private final int port;
20+
private final SkyHttpServerProps skyHttpServerProps;
21+
1622

17-
public SkyWebServer(final HttpServer server, final int port) {
23+
public SkyWebServer(final HttpServer server, final int port, final SkyHttpServerProps skyHttpServerProps) {
1824
this.server = server;
1925
this.port = port;
26+
this.skyHttpServerProps = skyHttpServerProps;
2027
}
2128

2229
@Override
2330
public void start() throws WebServerException {
31+
if (skyHttpServerProps.enableDebug()) {
32+
log.info(DEBUG_PREFIX + "start SkyHttpServer");
33+
}
2434
server.listen(getPort());
2535
}
2636

2737
@Override
2838
public void stop() throws WebServerException {
29-
// server.dispose();
39+
if (skyHttpServerProps.enableDebug()) {
40+
log.info(DEBUG_PREFIX + "stop SkyHttpServer");
41+
}
42+
server.close();
3043
}
3144

3245
@Override

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

+9-2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.springframework.boot.web.servlet.server.AbstractServletWebServerFactory;
88
import org.springframework.context.ResourceLoaderAware;
99
import org.springframework.core.io.ResourceLoader;
10+
import sky.starter.props.SkyHttpServerProps;
1011

1112
/**
1213
* //ServletWebServerFactoryConfiguration
@@ -16,11 +17,17 @@
1617
*/
1718
public class SkyWebServerFactory extends AbstractServletWebServerFactory implements ConfigurableWebServerFactory, ResourceLoaderAware {
1819

20+
private SkyHttpServerProps skyHttpServerProps;
21+
private HttpServer httpServer;
22+
1923
public SkyWebServerFactory() {
24+
this.httpServer = HttpServer.create();
2025
}
2126

22-
public SkyWebServerFactory(int port) {
27+
public SkyWebServerFactory(int port, HttpServer httpServer, SkyHttpServerProps skyHttpServerProps) {
2328
super(port);
29+
this.httpServer = httpServer;
30+
this.skyHttpServerProps = skyHttpServerProps;
2431
}
2532

2633
public SkyWebServerFactory(String contextPath, int port) {
@@ -38,7 +45,7 @@ public void setResourceLoader(final ResourceLoader resourceLoader) {
3845
}
3946

4047
private SkyWebServer getSkyWebServer(final ServletContextInitializer[] initializers) {
41-
return new SkyWebServer(HttpServer.create(), getPort());
48+
return new SkyWebServer(httpServer, getPort(), skyHttpServerProps);
4249
}
4350

4451
}

sky-http-springboot-starter/src/main/java/sky/starter/ext/AbstractNameValueExpression.java

-116
This file was deleted.

0 commit comments

Comments
 (0)