Почему базовый класс "плагина" между 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.

Плагины - это модули, которые, возможно, должны знать о жизненном цикле приложения для выполнения операций инициализации/очистки.