Почему базовый класс "плагина" между Play 1 и Play 2 настолько отличается?
Основной класс плагина в Play 1, play.PlayPlugin
, который имеет много методов (полей):
index : int
onLoad()
compileSources()
runTest(Class<BaseTest>)
bind(String, Class, Type, Annotation[], Map<String, String[]>)
bind(RootParamNode, String, Class<?>, Type, Annotation[])
bind(String, Object, Map<String, String[]>)
bindBean(RootParamNode, String, Object)
unBind(Object, String)
getMessage(String, Object, Object...)
getStatus()
getJsonStatus()
enhance(ApplicationClass)
onTemplateCompilation(Template)
rawInvocation(Request, Response)
serveStatic(VirtualFile, Request, Response)
beforeDetectingChanges()
loadTemplate(VirtualFile)
detectChange()
detectClassesChange()
onApplicationStart()
afterApplicationStart()
onApplicationStop()
beforeInvocation()
afterInvocation()
onInvocationException(Throwable)
invocationFinally()
beforeActionInvocation(Method)
onActionInvocationResult(Result)
onInvocationSuccess()
onRequestRouting(Route)
afterActionInvocation()
onConfigurationRead()
onRoutesLoaded()
onEvent(String, Object)
onClassesChange(List<ApplicationClass>)
addTemplateExtensions()
addMimeTypes()
compileAll(List<ApplicationClass>)
routeRequest(Request)
modelFactory(Class<? extends Model>)
afterFixtureLoad()
postEvent(String, Object)
onApplicationReady()
compareTo(PlayPlugin)
overrideTemplateSource(BaseTemplate, String)
willBeValidated(Object)
И Play 2 - play.api.Plugin
, что очень просто:
onStart(): Unit
onStop(): Unit
enabled: Boolean
Почему они такие разные? И я думаю, что методы в классе плагина Play 1 определены как extension-points
, они больше не нужны для Play 2?
Ответы
Ответ 1
Play 2.0 отличает глобальные настройки и плагины.
Глобальные настройки являются специфичными для приложения и позволяют настраивать некоторые свойства структуры (например, что должно быть если никаких действий не найдено для запроса). На самом деле большинство точек расширения плагинов Play 1.x теперь находятся в глобальных настройках Play 2.x.
Плагины - это модули, которые, возможно, должны знать о жизненном цикле приложения для выполнения операций инициализации/очистки.