diff --git a/pom.xml b/pom.xml index 65c9f91..7a07227 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ 8 8 - 1.0.1-SNAPSHOT + 1.0.2-SNAPSHOT org.javawebstack diff --git a/src/main/java/org/javawebstack/httpserver/HTTPServer.java b/src/main/java/org/javawebstack/httpserver/HTTPServer.java index a31fc67..bd7f498 100644 --- a/src/main/java/org/javawebstack/httpserver/HTTPServer.java +++ b/src/main/java/org/javawebstack/httpserver/HTTPServer.java @@ -27,9 +27,9 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; -import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.*; +import java.util.function.Function; import java.util.logging.Level; import java.util.logging.Logger; @@ -52,6 +52,7 @@ public class HTTPServer implements RouteParamTransformerProvider { private List routeAutoInjectors = new ArrayList<>(); private final Map beforeMiddleware = new HashMap<>(); private final Map afterMiddleware = new HashMap<>(); + private Function, Object> controllerInitiator = this::defaultControllerInitiator; public HTTPServer() { routeParamTransformers.add(DefaultRouteParamTransformer.INSTANCE); @@ -233,19 +234,31 @@ public HTTPServer exceptionHandler(ExceptionHandler handler) { return this; } + private Object defaultControllerInitiator (Class clazz) { + try { + return clazz.newInstance(); + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + + return null; + } + + public HTTPServer controllerInitiator (Function, Object> initiator) { + controllerInitiator = initiator; + return this; + } + public HTTPServer controller(Class parentClass, Package p) { return controller("", parentClass, p); } public HTTPServer controller(String globalPrefix, Class parentClass, Package p) { Reflections reflections = new Reflections(p.getName()); - reflections.getSubTypesOf(parentClass).forEach(c -> { - try { - Object controller = c.newInstance(); - controller(globalPrefix, controller); - } catch (InstantiationException | IllegalAccessException e) { - } - }); + reflections.getSubTypesOf(parentClass) + .stream() + .map(controllerInitiator) + .forEach(c -> controller(globalPrefix, c)); return this; }