controller = .getController(action.getControllerClass())
之前经常听到有人说,JFinal中每个请求的Controller都是new出来了,可以通过ActionHandler中上面这行代码发现。可以换成下面那种方式吗?
Map<Class<? extends Controller>, Controller> controllerMap = new ConcurrentHashMap<Class<? extends Controller>, Controller>(); Class<? extends Controller> clazz = action.getControllerClass(); Controller t = controllerMap.get(clazz); if (t == null) { t = (Controller) clazz.newInstance(); controllerMap.put(clazz, t); }
先构建一个Map,然后每次从controllerMap获取需要的Controller对象?这样会导致同一个Controller中的请求都只有一个Controller对象,这样设计是否存在并发问题?
正确的做法是:
me.setControllerFactory(new FastControllerFactory())
这样就可以避免每次都 new 出来新的 controller 了,而是每个线程在多次请求时只 new 出来一个