2727import javax .servlet .http .HttpServletRequest ;
2828import javax .servlet .http .HttpServletResponse ;
2929import java .io .File ;
30- import java .io .IOException ;
3130import java .nio .charset .StandardCharsets ;
3231import java .util .*;
32+ import java .util .function .Function ;
3333import java .util .logging .Level ;
3434import java .util .logging .Logger ;
3535
@@ -52,6 +52,7 @@ public class HTTPServer implements RouteParamTransformerProvider {
5252 private List <RouteAutoInjector > routeAutoInjectors = new ArrayList <>();
5353 private final Map <String , RequestHandler > beforeMiddleware = new HashMap <>();
5454 private final Map <String , AfterRequestHandler > afterMiddleware = new HashMap <>();
55+ private Function <Class <?>, Object > controllerInitiator = this ::defaultControllerInitiator ;
5556
5657 public HTTPServer () {
5758 routeParamTransformers .add (DefaultRouteParamTransformer .INSTANCE );
@@ -233,19 +234,31 @@ public HTTPServer exceptionHandler(ExceptionHandler handler) {
233234 return this ;
234235 }
235236
237+ private Object defaultControllerInitiator (Class <?> clazz ) {
238+ try {
239+ return clazz .newInstance ();
240+ } catch (InstantiationException | IllegalAccessException e ) {
241+ e .printStackTrace ();
242+ }
243+
244+ return null ;
245+ }
246+
247+ public HTTPServer controllerInitiator (Function <Class <?>, Object > initiator ) {
248+ controllerInitiator = initiator ;
249+ return this ;
250+ }
251+
236252 public HTTPServer controller (Class <?> parentClass , Package p ) {
237253 return controller ("" , parentClass , p );
238254 }
239255
240256 public HTTPServer controller (String globalPrefix , Class <?> parentClass , Package p ) {
241257 Reflections reflections = new Reflections (p .getName ());
242- reflections .getSubTypesOf (parentClass ).forEach (c -> {
243- try {
244- Object controller = c .newInstance ();
245- controller (globalPrefix , controller );
246- } catch (InstantiationException | IllegalAccessException e ) {
247- }
248- });
258+ reflections .getSubTypesOf (parentClass )
259+ .stream ()
260+ .map (controllerInitiator )
261+ .forEach (c -> controller (globalPrefix , c ));
249262 return this ;
250263 }
251264
0 commit comments