You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@grails.apache.org by as...@apache.org on 2026/07/10 03:04:55 UTC

(grails-website) branch asf-site-production updated: Deploying to documentation branch - 03:04:35

This is an automated email from the ASF dual-hosted git repository.

asf-ci-deploy pushed a commit to branch asf-site-production
in repository https://gitbox.apache.org/repos/asf/grails-website.git


The following commit(s) were added to refs/heads/asf-site-production by this push:
     new 446f08d0c47 Deploying to documentation branch - 03:04:35
446f08d0c47 is described below

commit 446f08d0c470427c5db910a7ab48bec912078812
Author: jdaugherty <jd...@users.noreply.github.com>
AuthorDate: Fri Jul 10 03:04:38 2026 +0000

    Deploying to documentation branch - 03:04:35
---
 docs/snapshot/api/allclasses-frame.html            |   3 +
 docs/snapshot/api/deprecated-list.html             |  10 +
 docs/snapshot/api/grails/boot/GrailsApp.html       |  29 ++-
 .../config/ApplicationArtefactScanner.html}        | 141 ++++++--------
 .../config/GrailsApplicationPostProcessor.html     |  14 ++
 ...railsEarlyPluginRegistrationPostProcessor.html} | 181 ++++++++---------
 .../config/GrailsPluginLifecycleInitializer.html}  | 116 ++++-------
 .../api/grails/boot/config/package-frame.html      |   2 +-
 .../api/grails/boot/config/package-summary.html    |  32 +++
 .../ProfilingGrailsApplicationPostProcessor.html   |   2 +-
 .../api/grails/core/DefaultGrailsApplication.html  |  20 +-
 .../grails/core/GrailsApplicationLifeCycle.html    |  39 +++-
 .../MongoDbDataStoreSpringInitializer.html         |   4 +-
 .../HibernateDatastoreSpringInitializer.html       |   4 +-
 .../api/grails/plugin/cache/CacheGrailsPlugin.html |   2 +-
 .../plugin/formfields/FieldsGrailsPlugin.html      |   2 +-
 .../api/grails/plugin/geb/GebGrailsPlugin.html     |   2 +-
 .../plugin/hibernate/HibernateGrailsPlugin.html    |   2 +-
 .../plugin/json/view/JsonViewGrailsPlugin.html     |   2 +-
 .../plugin/markup/view/MarkupViewGrailsPlugin.html |   2 +-
 .../scaffolding/ScaffoldingGrailsPlugin.html       |   2 +-
 .../SpringSecurityCoreGrailsPlugin.html            |   2 +-
 .../acl/SpringSecurityAclGrailsPlugin.html         |   2 +-
 .../cas/SpringSecurityCasGrailsPlugin.html         |   2 +-
 .../ldap/SpringSecurityLdapGrailsPlugin.html       |   2 +-
 .../oauth2/SpringSecurityOauth2GrailsPlugin.html   |   2 +-
 .../rest/SpringSecurityRestGormGrailsPlugin.html   |   2 +-
 .../SpringSecurityRestGrailsCacheGrailsPlugin.html |   2 +-
 .../rest/SpringSecurityRestGrailsPlugin.html       |   2 +-
 .../SpringSecurityRestMemcachedGrailsPlugin.html   |   2 +-
 .../rest/SpringSecurityRestRedisGrailsPlugin.html  |   2 +-
 .../ui/SpringSecurityUiGrailsPlugin.html           |   2 +-
 docs/snapshot/api/grails/plugins/GrailsPlugin.html |  80 +++++---
 docs/snapshot/api/grails/plugins/Plugin.html       |  54 +++++-
 .../api/grails/plugins/mail/MailGrailsPlugin.html  |   2 +-
 .../plugins/mongodb/MongodbGrailsPlugin.html       |   2 +-
 .../GrailsApplicationContextCommandRunner.html     |   2 +-
 .../api/grails/ui/console/GrailsSwingConsole.html  |   2 +-
 .../ui/script/GrailsApplicationScriptRunner.html   |   2 +-
 docs/snapshot/api/grails/ui/shell/GrailsShell.html |   2 +-
 .../ui/support/DevelopmentGrailsApplication.html   |   2 +-
 docs/snapshot/api/index-all.html                   |  63 +++++-
 .../grails/web/layout/LayoutGrailsPlugin.html      |   2 +-
 .../bootstrap/AbstractDatastoreInitializer.html    |  39 +++-
 .../graphql/plugin/GormGraphqlGrailsPlugin.html    |   2 +-
 .../api/org/grails/plugins/BinaryGrailsPlugin.html |   2 +-
 .../api/org/grails/plugins/CoreGrailsPlugin.html   |   2 +-
 .../org/grails/plugins/DefaultGrailsPlugin.html    |  80 ++++----
 .../grails/plugins/codecs/CodecsGrailsPlugin.html  |   2 +-
 .../plugins/converters/ConvertersGrailsPlugin.html |   2 +-
 .../DatabaseMigrationGrailsPlugin.html             |   2 +-
 .../databinding/DataBindingGrailsPlugin.html       |   2 +-
 .../plugins/datasource/DataSourceGrailsPlugin.html |   2 +-
 .../plugins/domain/DomainClassGrailsPlugin.html    |   2 +-
 .../plugins/events/EventBusGrailsPlugin.html       |   2 +-
 .../org/grails/plugins/i18n/I18nGrailsPlugin.html  |   2 +-
 .../plugins/services/ServicesGrailsPlugin.html     |   2 +-
 .../plugins/sitemesh3/Sitemesh3GrailsPlugin.html   |   2 +-
 .../plugins/web/GroovyPagesGrailsPlugin.html       |   2 +-
 .../web/async/ControllersAsyncGrailsPlugin.html    |   2 +-
 .../web/controllers/ControllersGrailsPlugin.html   |   2 +-
 .../web/interceptors/InterceptorsGrailsPlugin.html |   2 +-
 .../web/mapping/UrlMappingsGrailsPlugin.html       |   2 +-
 .../web/rest/plugin/RestResponderGrailsPlugin.html |   2 +-
 ....TestRuntimeGrailsApplicationPostProcessor.html |   2 +-
 docs/snapshot/api/redis/RedisGrailsPlugin.html     |   2 +-
 docs/snapshot/grails-data/api/index-all.html       |   4 +
 .../bootstrap/AbstractDatastoreInitializer.html    |  39 +++-
 .../MongoDbDataStoreSpringInitializer.html         |   4 +-
 .../HibernateDatastoreSpringInitializer.html       |   4 +-
 .../plugin/hibernate/HibernateGrailsPlugin.html    |   2 +-
 .../plugins/mongodb/MongodbGrailsPlugin.html       |   2 +-
 .../grails-data/hibernate5/api/index-all.html      |   4 +
 .../bootstrap/AbstractDatastoreInitializer.html    |  39 +++-
 .../graphql/plugin/GormGraphqlGrailsPlugin.html    |   2 +-
 .../DatabaseMigrationGrailsPlugin.html             |   2 +-
 .../MongoDbDataStoreSpringInitializer.html         |   4 +-
 .../HibernateDatastoreSpringInitializer.html       |   4 +-
 .../plugin/hibernate/HibernateGrailsPlugin.html    |   2 +-
 .../plugins/mongodb/MongodbGrailsPlugin.html       |   2 +-
 .../grails-data/hibernate7/api/index-all.html      |   4 +
 .../bootstrap/AbstractDatastoreInitializer.html    |  39 +++-
 .../graphql/plugin/GormGraphqlGrailsPlugin.html    |   2 +-
 .../DatabaseMigrationGrailsPlugin.html             |   2 +-
 .../MongoDbDataStoreSpringInitializer.html         |   2 +-
 .../HibernateDatastoreSpringInitializer.html       |   2 +-
 .../plugin/hibernate/HibernateGrailsPlugin.html    |   2 +-
 .../plugins/mongodb/MongodbGrailsPlugin.html       |   2 +-
 .../graphql/plugin/GormGraphqlGrailsPlugin.html    |   2 +-
 .../DatabaseMigrationGrailsPlugin.html             |   2 +-
 docs/snapshot/guide/introduction.html              |  33 ++++
 docs/snapshot/guide/plugins.html                   |  86 ++++++++-
 docs/snapshot/guide/single.html                    | 215 ++++++++++++++++++++-
 docs/snapshot/guide/upgrading.html                 |  96 ++++++++-
 .../ref/Versions/Grails BOM Hibernate5.html        |  16 +-
 .../ref/Versions/Grails BOM Hibernate7.html        |  16 +-
 docs/snapshot/ref/Versions/Grails BOM.html         |  16 +-
 97 files changed, 1201 insertions(+), 457 deletions(-)

diff --git a/docs/snapshot/api/allclasses-frame.html b/docs/snapshot/api/allclasses-frame.html
index dc4e59e2c06..d91867f9130 100644
--- a/docs/snapshot/api/allclasses-frame.html
+++ b/docs/snapshot/api/allclasses-frame.html
@@ -220,6 +220,7 @@
 <li><a href="grails/plugin/springsecurity/rest/memcached/Application.html" title="class in grails.plugin.springsecurity.rest.memcached" target="classFrame">Application</a></li>
 <li><a href="grails/plugin/springsecurity/rest/redis/Application.html" title="class in grails.plugin.springsecurity.rest.redis" target="classFrame">Application</a></li>
 <li><a href="org/grails/core/artefact/ApplicationArtefactHandler.html" title="class in org.grails.core.artefact" target="classFrame">ApplicationArtefactHandler</a></li>
+<li><a href="grails/boot/config/ApplicationArtefactScanner.html" title="class in grails.boot.config" target="classFrame">ApplicationArtefactScanner</a></li>
 <li><a href="grails/core/ApplicationAttributes.html" title="interface in grails.core" target="classFrame"><I>ApplicationAttributes</I></a></li>
 <li><a href="org/grails/compiler/injection/ApplicationClassInjector.html" title="class in org.grails.compiler.injection" target="classFrame">ApplicationClassInjector</a></li>
 <li><a href="grails/dev/commands/ApplicationCommand.html" title="trait in grails.dev.commands" target="classFrame"><I>ApplicationCommand</I></a></li>
@@ -1420,6 +1421,7 @@
 <li><a href="org/grails/plugins/domain/GrailsDomainClassAutoConfiguration.html" title="class in org.grails.plugins.domain" target="classFrame">GrailsDomainClassAutoConfiguration</a></li>
 <li><a href="grails/compiler/ast/GrailsDomainClassInjector.html" title="interface in grails.compiler.ast" target="classFrame"><I>GrailsDomainClassInjector</I></a></li>
 <li><a href="org/grails/core/exceptions/GrailsDomainException.html" title="class in org.grails.core.exceptions" target="classFrame">GrailsDomainException</a></li>
+<li><a href="grails/boot/config/GrailsEarlyPluginRegistrationPostProcessor.html" title="class in grails.boot.config" target="classFrame">GrailsEarlyPluginRegistrationPostProcessor</a></li>
 <li><a href="grails/build/logging/GrailsEclipseConsole.html" title="class in grails.build.logging" target="classFrame">GrailsEclipseConsole</a></li>
 <li><a href="org/grails/orm/hibernate/dirty/GrailsEntityDirtinessStrategy.html" title="class in org.grails.orm.hibernate.dirty" target="classFrame">GrailsEntityDirtinessStrategy</a></li>
 <li><a href="org/grails/orm/hibernate/cfg/domainbinding/util/GrailsEnumType.html" title="enum in org.grails.orm.hibernate.cfg.domainbinding.util" target="classFrame">GrailsEnumType</a></li>
@@ -1500,6 +1502,7 @@
 <li><a href="grails/boot/GrailsPluginApplication.html" title="interface in grails.boot" target="classFrame"><I>GrailsPluginApplication</I></a></li>
 <li><a href="org/grails/gradle/plugin/core/GrailsPluginGradlePlugin.html" title="class in org.grails.gradle.plugin.core" target="classFrame">GrailsPluginGradlePlugin</a></li>
 <li><a href="grails/plugins/GrailsPluginInfo.html" title="interface in grails.plugins" target="classFrame"><I>GrailsPluginInfo</I></a></li>
+<li><a href="grails/boot/config/GrailsPluginLifecycleInitializer.html" title="class in grails.boot.config" target="classFrame">GrailsPluginLifecycleInitializer</a></li>
 <li><a href="grails/plugins/GrailsPluginManager.html" title="interface in grails.plugins" target="classFrame"><I>GrailsPluginManager</I></a></li>
 <li><a href="grails/plugins/GrailsPluginSorter.html" title="class in grails.plugins" target="classFrame">GrailsPluginSorter</a></li>
 <li><a href="org/grails/buffer/GrailsPrintWriter.html" title="class in org.grails.buffer" target="classFrame">GrailsPrintWriter</a></li>
diff --git a/docs/snapshot/api/deprecated-list.html b/docs/snapshot/api/deprecated-list.html
index 7000b63f136..40f04c4ced4 100644
--- a/docs/snapshot/api/deprecated-list.html
+++ b/docs/snapshot/api/deprecated-list.html
@@ -335,6 +335,11 @@ if (location.href.indexOf('is-external=true') == -1) {
                     <div class="block"><i><DL><DT><B>deprecated:</B></DT><DD>Use <a href='../../../../org/grails/web/servlet/mvc/GrailsWebRequest.html#getContextPath()' title='instead'>instead</a></DD></DL> </i></div>
                 </td>
             </tr>
+            <tr class="altColor">
+                <td class="colOne"><strong><a href="grails/core/GrailsApplicationLifeCycle.html#doWithSpring()">GrailsApplicationLifeCycle#doWithSpring</a></strong>()
+                    <div class="block"><i>Sub classes should override to provide implementations</i></div>
+                </td>
+            </tr>
             <tr class="altColor">
                 <td class="colOne"><strong><a href="org/grails/orm/hibernate/GrailsHibernateTemplate.html#prepareCriteria(org.hibernate.Criteria)">GrailsHibernateTemplate#prepareCriteria</a></strong>(<a href='../../../../org.hibernate.Criteria.html'>Criteria</a> criteria)
                     <div class="block"><i>Prepare the given Criteria object, applying cache settings and/or a
@@ -407,6 +412,11 @@ if (location.href.indexOf('is-external=true') == -1) {
                     <div class="block"><i><DL><DT><B>deprecated:</B></DT><DD>use attach(String, String, byte[])</DD></DL> </i></div>
                 </td>
             </tr>
+            <tr class="altColor">
+                <td class="colOne"><strong><a href="grails/plugins/Plugin.html#doWithSpring()">Plugin#doWithSpring</a></strong>()
+                    <div class="block"><i>Sub classes should override to provide implementations</i></div>
+                </td>
+            </tr>
             <tr class="altColor">
                 <td class="colOne"><strong><a href="org/grails/orm/hibernate/cfg/PropertyConfig.html#getUpdateable()">PropertyConfig#getUpdateable</a></strong>()
                     <div class="block"><i>Whether or not this column is updatable by hibernate</i></div>
diff --git a/docs/snapshot/api/grails/boot/GrailsApp.html b/docs/snapshot/api/grails/boot/GrailsApp.html
index 797eb8e2d31..68b0bbdd614 100644
--- a/docs/snapshot/api/grails/boot/GrailsApp.html
+++ b/docs/snapshot/api/grails/boot/GrailsApp.html
@@ -255,38 +255,46 @@ extends <a href='../../org.springframework.boot.SpringApplication.html'>SpringAp
                         </tr>
                         
                         <tr class="altColor">
+                            <td class="colFirst"><code></code></td>
+                            <td class="colLast"><code>protected&nbsp;void</code></td>
+                            <td class="colLast"><code><strong><a href="#postProcessApplicationContext(org.springframework.context.ConfigurableApplicationContext)">postProcessApplicationContext</a></strong>(<a href='../../org.springframework.context.ConfigurableApplicationContext.html'>ConfigurableApplicationContext</a> applicationContext)</code><br>Stashes the application source classes as a well-known singleton so that
+ <CODE>GrailsEarlyPluginRegistrationPostProcessor</CODE> can perform artefact discovery before
+ Spring Boot auto-configuration is processed. </td>
+                        </tr>
+                        
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>protected&nbsp;java.lang.Object</code></td>
                             <td class="colLast"><code><strong><a href="#printRunStatus(org.springframework.context.ConfigurableApplicationContext)">printRunStatus</a></strong>(<a href='../../org.springframework.context.ConfigurableApplicationContext.html'>ConfigurableApplicationContext</a> applicationContext)</code><br></td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>protected&nbsp;void</code></td>
                             <td class="colLast"><code><strong><a href="#recompile(java.io.File, org.codehaus.groovy.control.CompilerConfiguration, java.lang.String)">recompile</a></strong>(java.io.File changedFile, org.codehaus.groovy.control.CompilerConfiguration compilerConfig, java.lang.String location)</code><br></td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code><a href='../../org.springframework.context.ConfigurableApplicationContext.html'>ConfigurableApplicationContext</a></code></td>
                             <td class="colLast"><code><strong><a href="#run(java.lang.String)">run</a></strong>(java.lang.String[] args)</code><br></td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>static&nbsp;<a href='../../org.springframework.context.ConfigurableApplicationContext.html'>ConfigurableApplicationContext</a></code></td>
                             <td class="colLast"><code><strong><a href="#run(Class, java.lang.String)">run</a></strong>(java.lang.Class&lt;?&gt; source, java.lang.String[] args)</code><br>Static helper that can be used to run a <a href='../../grails/boot/GrailsApp.html' title='GrailsApp'>GrailsApp</a> from the
  specified source using default settings.</td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>static&nbsp;<a href='../../org.springframework.context.ConfigurableApplicationContext.html'>ConfigurableApplicationContext</a></code></td>
                             <td class="colLast"><code><strong><a href="#run(Class, java.lang.String)">run</a></strong>(java.lang.Class&lt;?&gt;[] sources, java.lang.String[] args)</code><br>Static helper that can be used to run a <a href='../../grails/boot/GrailsApp.html' title='GrailsApp'>GrailsApp</a> from the
  specified sources using default settings and user supplied arguments.</td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>static&nbsp;void</code></td>
                             <td class="colLast"><code><strong><a href="#setDevelopmentModeActive(boolean)">setDevelopmentModeActive</a></strong>(boolean active)</code><br></td>
@@ -460,6 +468,17 @@ extends <a href='../../org.springframework.boot.SpringApplication.html'>SpringAp
                             </li>
                         </ul>
                     
+                        <a name="postProcessApplicationContext(org.springframework.context.ConfigurableApplicationContext)"><!-- --></a>
+                        <ul class="blockListLast">
+                            <li class="blockList">
+                                <h4>@java.lang.Override<br>protected&nbsp;void <strong>postProcessApplicationContext</strong>(<a href='../../org.springframework.context.ConfigurableApplicationContext.html'>ConfigurableApplicationContext</a> applicationContext)</h4>
+                                <p> Stashes the application source classes as a well-known singleton so that
+ <CODE>GrailsEarlyPluginRegistrationPostProcessor</CODE> can perform artefact discovery before
+ Spring Boot auto-configuration is processed. Runs before the context initializers are
+ applied, so the singleton is available by the time the early registration phase executes.</p>
+                            </li>
+                        </ul>
+                    
                         <a name="printRunStatus(org.springframework.context.ConfigurableApplicationContext)"><!-- --></a>
                         <ul class="blockListLast">
                             <li class="blockList">
diff --git a/docs/snapshot/api/grails/ui/support/DevelopmentGrailsApplication.html b/docs/snapshot/api/grails/boot/config/ApplicationArtefactScanner.html
similarity index 55%
copy from docs/snapshot/api/grails/ui/support/DevelopmentGrailsApplication.html
copy to docs/snapshot/api/grails/boot/config/ApplicationArtefactScanner.html
index 4732e6808fa..b1f44105634 100644
--- a/docs/snapshot/api/grails/ui/support/DevelopmentGrailsApplication.html
+++ b/docs/snapshot/api/grails/boot/config/ApplicationArtefactScanner.html
@@ -27,7 +27,7 @@
 <html>
 <head>
     <!-- Generated by groovydoc (5.0.7) -->
-    <title>DevelopmentGrailsApplication (Grails 8.0.0-SNAPSHOT)</title>
+    <title>ApplicationArtefactScanner (Grails 8.0.0-SNAPSHOT)</title>
     
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     <link href="../../../groovy.ico" type="image/x-icon" rel="shortcut icon">
@@ -37,7 +37,7 @@
 <body class="center">
 <script type="text/javascript"><!--
 if (location.href.indexOf('is-external=true') == -1) {
-    parent.document.title="DevelopmentGrailsApplication (Grails 8.0.0-SNAPSHOT)";
+    parent.document.title="ApplicationArtefactScanner (Grails 8.0.0-SNAPSHOT)";
 }
 //-->
 </script>
@@ -63,18 +63,18 @@ if (location.href.indexOf('is-external=true') == -1) {
 <div class="subNav">
     <div>
         <ul class="navList">
-            <li><a href="../../../index.html?grails/ui/support/DevelopmentGrailsApplication" target="_top">Frames</a></li>
-            <li><a href="DevelopmentGrailsApplication.html" target="_top">No Frames</a></li>
+            <li><a href="../../../index.html?grails/boot/config/ApplicationArtefactScanner" target="_top">Frames</a></li>
+            <li><a href="ApplicationArtefactScanner.html" target="_top">No Frames</a></li>
         </ul>
     </div>
     <div>
         <ul class="subNavList">
             <li>Summary:&nbsp;</li>
-            Nested&nbsp;&nbsp;&nbsp;Field&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<li><a href="#constructor_summary">Constructor</a></li>&nbsp;&nbsp;&nbsp;<li><a href="#method_summary">Method</a></li>&nbsp;&nbsp;&nbsp;
+            Nested&nbsp;&nbsp;&nbsp;Field&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructor&nbsp;&nbsp;&nbsp;<li><a href="#method_summary">Method</a></li>&nbsp;&nbsp;&nbsp;
         </ul>
         <ul class="subNavList">
             <li>&nbsp;|&nbsp;Detail:&nbsp;</li>
-            Field&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<li><a href="#constructor_detail">Constructor</a></li>&nbsp;&nbsp;&nbsp;<li><a href="#method_detail">Method</a></li>&nbsp;&nbsp;&nbsp;
+            Field&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructor&nbsp;&nbsp;&nbsp;<li><a href="#method_detail">Method</a></li>&nbsp;&nbsp;&nbsp;
         </ul>
     </div>
     <a name="skip-navbar_top">
@@ -85,13 +85,13 @@ if (location.href.indexOf('is-external=true') == -1) {
 <!-- ======== START OF CLASS DATA ======== -->
 <div class="header">
 
-    <div class="subTitle">Package: <strong>grails.ui.support</strong></div>
+    <div class="subTitle">Package: <strong>grails.boot.config</strong></div>
 
-    <h2 title="[Groovy] Class DevelopmentGrailsApplication" class="title">[Groovy] Class DevelopmentGrailsApplication</h2>
+    <h2 title="[Groovy] Class ApplicationArtefactScanner" class="title">[Groovy] Class ApplicationArtefactScanner</h2>
 </div>
 <div class="contentContainer">
 <ul class="inheritance">
-<li><ul class="inheritance"></ul></li><li><ul class="inheritance"></ul></li><li><ul class="inheritance"></ul></li><li>grails.ui.support.DevelopmentGrailsApplication
+<li><ul class="inheritance"></ul></li><li>grails.boot.config.ApplicationArtefactScanner
 </ul>
 <div class="description">
     <ul class="blockList">
@@ -102,10 +102,14 @@ if (location.href.indexOf('is-external=true') == -1) {
             <hr>
 
 <pre>@groovy.transform.CompileStatic
-class DevelopmentGrailsApplication
-extends <a href='../../../grails/boot/GrailsApp.html'>GrailsApp</a></pre>
+final class ApplicationArtefactScanner
+extends java.lang.Object</pre>
 
-    <p> <DL><DT><B>Authors:</B></DT><DD>Graeme Rocher</DD></DL><DL><DT><B>Since:</B></DT><DD>3.0</DD></DL></p>
+    <p> Discovers the artefact classes that make up a Grails application by scanning the classpath relative
+ to an application class. This is the single implementation of the default scanning performed by
+ <a href='../../../grails/boot/config/GrailsAutoConfiguration.html#classes()' title='GrailsAutoConfiguration.classes'>GrailsAutoConfiguration.classes</a>, also used by
+ <a href='../../../grails/boot/config/GrailsEarlyPluginRegistrationPostProcessor.html' title='GrailsEarlyPluginRegistrationPostProcessor'>GrailsEarlyPluginRegistrationPostProcessor</a> to perform artefact discovery before Spring
+ Boot auto-configuration is processed. <DL><DT><B>Since:</B></DT><DD>8.0</DD></DL></p>
 
           </li>
     </ul>
@@ -124,52 +128,11 @@ extends <a href='../../../grails/boot/GrailsApp.html'>GrailsApp</a></pre>
 
         <!-- =========== PROPERTY SUMMARY =========== -->
         
-         <ul class="blockList"> 
-                 <li class="blockList"><a name="properties_summary"><!--   --></a>
-                     <ul class="blockList">
-                         <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Inherited properties summary table">
-                             <caption><span>Inherited properties</span><span class="tabEnd">&nbsp;</span></caption>
-                             <tr>
-                                 <th class="colFirst" scope="col">Properties inherited from class</th>
-                                 <th class="colLast" scope="col">Properties</th>
-                             </tr>
-                                                     <tr class="altColor">
-                                <td class="colFirst"><strong><code>class <a href='../../../grails/boot/GrailsApp.html'>GrailsApp</a></code></strong></td>
-                                <td class="colLast"><code>configuredEnvironment, developmentModeActive, enableBeanCreationProfiler</code></td>
-                            </tr>
-
-                         </table>
-                     </ul>
-                 </li>
-                 
-            </ul>
-        
 
         <!-- =========== ELEMENT SUMMARY =========== -->
         
 
         
-        <!-- ======== CONSTRUCTOR SUMMARY ======== -->
-        <ul class="blockList">
-                <li class="blockList"><a name="constructor_summary"><!--   --></a>
-                    <h3>Constructor Summary</h3>
-                    <ul class="blockList">
-                    <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructors Summary table">
-                        <caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
-                        <tr>
-                            <th class="colFirst" scope="col">Constructor and description</th>
-                        </tr>
-                        
-                        <tr class="altColor">
-                            <td class="colFirst">
-                                <code>protected&nbsp;<strong><a href="#DevelopmentGrailsApplication(Class)">DevelopmentGrailsApplication</a></strong>(java.lang.Class&lt;?&gt;[] sources)</code><br></td>
-                        </tr>
-                        
-                    </table>
-                   </ul>
-              </li>
-        </ul>
-        
 
         
         <!-- ========== METHOD SUMMARY =========== -->
@@ -188,8 +151,22 @@ extends <a href='../../../grails/boot/GrailsApp.html'>GrailsApp</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code></code></td>
-                            <td class="colLast"><code>protected&nbsp;java.lang.Object</code></td>
-                            <td class="colLast"><code><strong><a href="#configureApplicationContextClass()">configureApplicationContextClass</a></strong>()</code><br></td>
+                            <td class="colLast"><code>static&nbsp;java.util.Collection&lt;java.lang.Class&gt;</code></td>
+                            <td class="colLast"><code><strong><a href="#loadTransformedClasses(java.lang.ClassLoader)">loadTransformedClasses</a></strong>(java.lang.ClassLoader classLoader)</code><br>Loads the classes registered by Grails artefact transformations at compile time.</td>
+                        </tr>
+                        
+                        <tr class="rowColor">
+                            <td class="colFirst"><code></code></td>
+                            <td class="colLast"><code>static&nbsp;java.util.Collection&lt;java.lang.Class&gt;</code></td>
+                            <td class="colLast"><code><strong><a href="#scanApplicationClasses(Class)">scanApplicationClasses</a></strong>(java.lang.Class&lt;?&gt; applicationClass)</code><br>Scans for application classes in the package of the given application class, including any
+ classes registered by Grails artefact transformations.</td>
+                        </tr>
+                        
+                        <tr class="altColor">
+                            <td class="colFirst"><code></code></td>
+                            <td class="colLast"><code>static&nbsp;java.util.Collection&lt;java.lang.Class&gt;</code></td>
+                            <td class="colLast"><code><strong><a href="#scanApplicationClasses(Class, Collection)">scanApplicationClasses</a></strong>(java.lang.Class&lt;?&gt; applicationClass, java.util.Collection&lt;java.lang.String&gt; packageNames)</code><br>Scans for application classes in the given packages relative to the given application class,
+ including any classes registered by Grails artefact transformations.</td>
                         </tr>
                         
                     </table>
@@ -207,8 +184,8 @@ extends <a href='../../../grails/boot/GrailsApp.html'>GrailsApp</a></pre>
                         </tr>
                         
                         <tr class="altColor">
-                            <td class="colFirst"><code>class <a href='../../../grails/boot/GrailsApp.html'>GrailsApp</a></code></td>
-                            <td class="colLast"><code><a href='../../../grails/boot/GrailsApp.html#compileGroovyFile(org.codehaus.groovy.control.CompilerConfiguration, java.io.File)'>compileGroovyFile</a>, <a href='../../../grails/boot/GrailsApp.html#configureCliPidFileWriter()'>configureCliPidFileWriter</a>, <a href='../../../grails/boot/GrailsApp.html#configureDirectoryWatcher(org.grails.io.watch.DirectoryWatcher, java.lang.String)'>configureDirectoryWatcher</a>, <a href='../../../grai [...]
+                            <td class="colFirst"><code>class java.lang.Object</code></td>
+                            <td class="colLast"><code>java.lang.Object#equals(java.lang.Object), java.lang.Object#getClass(), java.lang.Object#hashCode(), java.lang.Object#notify(), java.lang.Object#notifyAll(), java.lang.Object#toString(), java.lang.Object#wait(), java.lang.Object#wait(long), java.lang.Object#wait(long, int)</code></td>
                         </tr>
                     </table>
                    </ul>
@@ -232,24 +209,6 @@ extends <a href='../../../grails/boot/GrailsApp.html'>GrailsApp</a></pre>
             
 
             
-            <!-- =========== CONSTRUCTOR DETAIL =========== -->
-            <ul class="blockList">
-                <li class="blockList"><a name="constructor_detail">
-                    <!--   -->
-                </a>
-                    <h3>Constructor Detail</h3>
-                    
-                        <a name="DevelopmentGrailsApplication(Class)"><!-- --></a>
-                        <ul class="blockListLast">
-                            <li class="blockList">
-                                <h4>protected&nbsp;<strong>DevelopmentGrailsApplication</strong>(java.lang.Class&lt;?&gt;[] sources)</h4>
-                                <p></p>
-                            </li>
-                        </ul>
-                    
-                </li>
-            </ul>
-            
 
 
             
@@ -260,11 +219,29 @@ extends <a href='../../../grails/boot/GrailsApp.html'>GrailsApp</a></pre>
                 </a>
                     <h3>Method Detail</h3>
                     
-                        <a name="configureApplicationContextClass()"><!-- --></a>
+                        <a name="loadTransformedClasses(java.lang.ClassLoader)"><!-- --></a>
+                        <ul class="blockListLast">
+                            <li class="blockList">
+                                <h4>static&nbsp;java.util.Collection&lt;java.lang.Class&gt; <strong>loadTransformedClasses</strong>(java.lang.ClassLoader classLoader)</h4>
+                                <p> Loads the classes registered by Grails artefact transformations at compile time. <DL><DT><B>Parameters:</B></DT><DD><code>classLoader</code> -  The class loader to load the classes with</DD></DL><DL><DT><B>Returns:</B></DT><DD>The transformed classes resolvable by the given class loader</DD></DL></p>
+                            </li>
+                        </ul>
+                    
+                        <a name="scanApplicationClasses(Class)"><!-- --></a>
+                        <ul class="blockListLast">
+                            <li class="blockList">
+                                <h4>static&nbsp;java.util.Collection&lt;java.lang.Class&gt; <strong>scanApplicationClasses</strong>(java.lang.Class&lt;?&gt; applicationClass)</h4>
+                                <p> Scans for application classes in the package of the given application class, including any
+ classes registered by Grails artefact transformations. <DL><DT><B>Parameters:</B></DT><DD><code>applicationClass</code> -  The application class to scan relative to</DD></DL><DL><DT><B>Returns:</B></DT><DD>The classes that constitute the Grails application</DD></DL></p>
+                            </li>
+                        </ul>
+                    
+                        <a name="scanApplicationClasses(Class, Collection)"><!-- --></a>
                         <ul class="blockListLast">
                             <li class="blockList">
-                                <h4>protected&nbsp;java.lang.Object <strong>configureApplicationContextClass</strong>()</h4>
-                                <p></p>
+                                <h4>static&nbsp;java.util.Collection&lt;java.lang.Class&gt; <strong>scanApplicationClasses</strong>(java.lang.Class&lt;?&gt; applicationClass, java.util.Collection&lt;java.lang.String&gt; packageNames)</h4>
+                                <p> Scans for application classes in the given packages relative to the given application class,
+ including any classes registered by Grails artefact transformations. <DL><DT><B>Parameters:</B></DT><DD><code>applicationClass</code> -  The application class to scan relative to</DD><DD><code>packageNames</code> -  The package names to scan</DD></DL><DL><DT><B>Returns:</B></DT><DD>The classes that constitute the Grails application</DD></DL></p>
                             </li>
                         </ul>
                     
@@ -295,18 +272,18 @@ extends <a href='../../../grails/boot/GrailsApp.html'>GrailsApp</a></pre>
 <div class="subNav">
     <div>
         <ul class="navList">
-            <li><a href="../../../index.html?grails/ui/support/DevelopmentGrailsApplication" target="_top">Frames</a></li>
-            <li><a href="DevelopmentGrailsApplication.html" target="_top">No Frames</a></li>
+            <li><a href="../../../index.html?grails/boot/config/ApplicationArtefactScanner" target="_top">Frames</a></li>
+            <li><a href="ApplicationArtefactScanner.html" target="_top">No Frames</a></li>
         </ul>
     </div>
     <div>
         <ul class="subNavList">
             <li>Summary:&nbsp;</li>
-            Nested&nbsp;&nbsp;&nbsp;Field&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<li><a href="#constructor_summary">Constructor</a></li>&nbsp;&nbsp;&nbsp;<li><a href="#method_summary">Method</a></li>&nbsp;&nbsp;&nbsp;
+            Nested&nbsp;&nbsp;&nbsp;Field&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructor&nbsp;&nbsp;&nbsp;<li><a href="#method_summary">Method</a></li>&nbsp;&nbsp;&nbsp;
         </ul>
         <ul class="subNavList">
             <li>&nbsp;|&nbsp;Detail:&nbsp;</li>
-            Field&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<li><a href="#constructor_detail">Constructor</a></li>&nbsp;&nbsp;&nbsp;<li><a href="#method_detail">Method</a></li>&nbsp;&nbsp;&nbsp;
+            Field&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructor&nbsp;&nbsp;&nbsp;<li><a href="#method_detail">Method</a></li>&nbsp;&nbsp;&nbsp;
         </ul>
     </div>
     <p><!-- Matomo -->
diff --git a/docs/snapshot/api/grails/boot/config/GrailsApplicationPostProcessor.html b/docs/snapshot/api/grails/boot/config/GrailsApplicationPostProcessor.html
index 4e504527c76..c4f2d6945ad 100644
--- a/docs/snapshot/api/grails/boot/config/GrailsApplicationPostProcessor.html
+++ b/docs/snapshot/api/grails/boot/config/GrailsApplicationPostProcessor.html
@@ -147,6 +147,12 @@ implements <a href='../../../org.springframework.context.ApplicationContextAware
                         </tr>
                         
                         <tr class="rowColor">
+                            <td class="colFirst"><code><strong>protected&nbsp;boolean</strong></code>&nbsp;</td>
+                            <td class="colLast"><code><a href="#earlyPluginRegistrationRan">earlyPluginRegistrationRan</a></code></td>
+                            <td class="colLast"></td>
+                        </tr>
+                        
+                        <tr class="altColor">
                             <td class="colFirst"><code><strong>protected&nbsp;<a href='../../../grails/plugins/GrailsPluginManager.html'>GrailsPluginManager</a></strong></code>&nbsp;</td>
                             <td class="colLast"><code><a href="#pluginManager">pluginManager</a></code></td>
                             <td class="colLast"></td>
@@ -353,6 +359,14 @@ implements <a href='../../../org.springframework.context.ApplicationContextAware
                             </li>
                         </ul>
                     
+                        <a name="earlyPluginRegistrationRan"><!-- --></a>
+                        <ul class="blockListLast">
+                            <li class="blockList">
+                                <h4>protected&nbsp;final&nbsp;boolean <strong>earlyPluginRegistrationRan</strong></h4>
+                                <p></p>
+                            </li>
+                        </ul>
+                    
                         <a name="pluginManager"><!-- --></a>
                         <ul class="blockListLast">
                             <li class="blockList">
diff --git a/docs/snapshot/api/org/grails/testing/GrailsApplicationBuilder.TestRuntimeGrailsApplicationPostProcessor.html b/docs/snapshot/api/grails/boot/config/GrailsEarlyPluginRegistrationPostProcessor.html
similarity index 53%
copy from docs/snapshot/api/org/grails/testing/GrailsApplicationBuilder.TestRuntimeGrailsApplicationPostProcessor.html
copy to docs/snapshot/api/grails/boot/config/GrailsEarlyPluginRegistrationPostProcessor.html
index bf60e619947..3e1f79197ae 100644
--- a/docs/snapshot/api/org/grails/testing/GrailsApplicationBuilder.TestRuntimeGrailsApplicationPostProcessor.html
+++ b/docs/snapshot/api/grails/boot/config/GrailsEarlyPluginRegistrationPostProcessor.html
@@ -27,7 +27,7 @@
 <html>
 <head>
     <!-- Generated by groovydoc (5.0.7) -->
-    <title>GrailsApplicationBuilder.TestRuntimeGrailsApplicationPostProcessor (Grails 8.0.0-SNAPSHOT)</title>
+    <title>GrailsEarlyPluginRegistrationPostProcessor (Grails 8.0.0-SNAPSHOT)</title>
     
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     <link href="../../../groovy.ico" type="image/x-icon" rel="shortcut icon">
@@ -37,7 +37,7 @@
 <body class="center">
 <script type="text/javascript"><!--
 if (location.href.indexOf('is-external=true') == -1) {
-    parent.document.title="GrailsApplicationBuilder.TestRuntimeGrailsApplicationPostProcessor (Grails 8.0.0-SNAPSHOT)";
+    parent.document.title="GrailsEarlyPluginRegistrationPostProcessor (Grails 8.0.0-SNAPSHOT)";
 }
 //-->
 </script>
@@ -63,18 +63,18 @@ if (location.href.indexOf('is-external=true') == -1) {
 <div class="subNav">
     <div>
         <ul class="navList">
-            <li><a href="../../../index.html?org/grails/testing/GrailsApplicationBuilder.TestRuntimeGrailsApplicationPostProcessor" target="_top">Frames</a></li>
-            <li><a href="GrailsApplicationBuilder.TestRuntimeGrailsApplicationPostProcessor.html" target="_top">No Frames</a></li>
+            <li><a href="../../../index.html?grails/boot/config/GrailsEarlyPluginRegistrationPostProcessor" target="_top">Frames</a></li>
+            <li><a href="GrailsEarlyPluginRegistrationPostProcessor.html" target="_top">No Frames</a></li>
         </ul>
     </div>
     <div>
         <ul class="subNavList">
             <li>Summary:&nbsp;</li>
-            Nested&nbsp;&nbsp;&nbsp;Field&nbsp;&nbsp;&nbsp;<li><a href="#property_summary">Property</a></li>&nbsp;&nbsp;&nbsp;<li><a href="#constructor_summary">Constructor</a></li>&nbsp;&nbsp;&nbsp;<li><a href="#method_summary">Method</a></li>&nbsp;&nbsp;&nbsp;
+            Nested&nbsp;&nbsp;&nbsp;<li><a href="#field_summary">Field</a></li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<li><a href="#constructor_summary">Constructor</a></li>&nbsp;&nbsp;&nbsp;<li><a href="#method_summary">Method</a></li>&nbsp;&nbsp;&nbsp;
         </ul>
         <ul class="subNavList">
             <li>&nbsp;|&nbsp;Detail:&nbsp;</li>
-            Field&nbsp;&nbsp;&nbsp;<li><a href="#prop_detail">Property</a></li>&nbsp;&nbsp;&nbsp;<li><a href="#constructor_detail">Constructor</a></li>&nbsp;&nbsp;&nbsp;<li><a href="#method_detail">Method</a></li>&nbsp;&nbsp;&nbsp;
+            <li><a href="#field_detail">Field</a></li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<li><a href="#constructor_detail">Constructor</a></li>&nbsp;&nbsp;&nbsp;<li><a href="#method_detail">Method</a></li>&nbsp;&nbsp;&nbsp;
         </ul>
     </div>
     <a name="skip-navbar_top">
@@ -85,24 +85,59 @@ if (location.href.indexOf('is-external=true') == -1) {
 <!-- ======== START OF CLASS DATA ======== -->
 <div class="header">
 
-    <div class="subTitle">Package: <strong>org.grails.testing</strong></div>
+    <div class="subTitle">Package: <strong>grails.boot.config</strong></div>
 
-    <h2 title="[Groovy] Class GrailsApplicationBuilder.TestRuntimeGrailsApplicationPostProcessor" class="title">[Groovy] Class GrailsApplicationBuilder.TestRuntimeGrailsApplicationPostProcessor</h2>
+    <h2 title="[Java] Class GrailsEarlyPluginRegistrationPostProcessor" class="title">[Java] Class GrailsEarlyPluginRegistrationPostProcessor</h2>
 </div>
 <div class="contentContainer">
 <ul class="inheritance">
-<li><ul class="inheritance"></ul></li><li><ul class="inheritance"></ul></li><li>org.grails.testing.GrailsApplicationBuilder.TestRuntimeGrailsApplicationPostProcessor
+<li><ul class="inheritance"></ul></li><li>grails.boot.config.GrailsEarlyPluginRegistrationPostProcessor
 </ul>
 <div class="description">
     <ul class="blockList">
         <li class="blockList">
 
+            <dl>
+                <dt>All Implemented Interfaces and Traits:</dt>
+                <dd><a href='../../../org.springframework.context.ApplicationListener.html'>ApplicationListener</a>, <a href='../../../org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor.html'>BeanDefinitionRegistryPostProcessor</a></dd>
+            </dl>
+    
 
             <!-- todo: direct known subclasses -->
             <hr>
 
-<pre>static class GrailsApplicationBuilder.TestRuntimeGrailsApplicationPostProcessor
-extends <a href='../../../grails/boot/config/GrailsApplicationPostProcessor.html'>GrailsApplicationPostProcessor</a></pre>
+<pre>public class GrailsEarlyPluginRegistrationPostProcessor
+extends java.lang.Object
+implements <a href='../../../org.springframework.context.ApplicationListener.html'>ApplicationListener</a>, <a href='../../../org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor.html'>BeanDefinitionRegistryPostProcessor</a></pre>
+
+    <p> Runs the plugin bean-registration phase of the Grails lifecycle <em>before</em> Spring Boot's
+ auto-configuration is processed, so that beans contributed by plugins via <CODE>doWithSpring</CODE>
+ are already present in the registry when Boot evaluates its <CODE>@ConditionalOnMissingBean</CODE>
+ guards — auto-configured defaults then back off in favour of the plugin beans, without any
+ override or removal afterwards.
+
+ <p>It is added to the context programmatically (see <a href='../../../grails/boot/config/GrailsPluginLifecycleInitializer.html' title='GrailsPluginLifecycleInitializer'>GrailsPluginLifecycleInitializer</a>), so its
+ <CODE>postProcessBeanDefinitionRegistry</CODE> runs ahead of Boot's <CODE>ConfigurationClassPostProcessor</CODE>
+ (which expands the <CODE>@AutoConfiguration</CODE> imports). Manually-added
+ <CODE>BeanDefinitionRegistryPostProcessor</CODE>s always run before registry-discovered ones; Spring does
+ not sort manually-added post-processors by <CODE>getOrder()</CODE>, so this class deliberately does not
+ implement <CODE>PriorityOrdered</CODE>.
+
+ <p>This phase builds the one true GrailsApplication and GrailsPluginManager: plugins
+ are discovered via the promoted PluginDiscovery singleton and instantiated exactly once.
+ Artefact discovery also happens here, mirroring
+ <CODE>GrailsApplicationPostProcessor.performGrailsInitializationSequence()</CODE>, because core plugins
+ (controllers, services, interceptors) iterate <CODE>grailsApplication</CODE> artefacts inside their
+ <CODE>doWithSpring</CODE> closures. Application classes are resolved from the source classes stashed by
+ <a href='../../../grails/boot/GrailsApp.html' title='GrailsApp'>GrailsApp</a> (see <a href='#APPLICATION_SOURCE_CLASSES_BEAN_NAME'>APPLICATION_SOURCE_CLASSES_BEAN_NAME</a>) and scanned with the
+ same logic <a href='../../../grails/boot/config/GrailsAutoConfiguration.html#classes()' title='GrailsAutoConfiguration.classes'>GrailsAutoConfiguration.classes</a> uses; when the application was not started
+ through <CODE>GrailsApp</CODE> the phase proceeds without application classes.
+
+ <p>Once complete, the <CODE>grailsApplication</CODE> and <CODE>pluginManager</CODE> singletons are promoted to
+ the bean factory together with the <a href='#EARLY_REGISTRATION_COMPLETE_BEAN_NAME'>EARLY_REGISTRATION_COMPLETE_BEAN_NAME</a> marker, so
+ <a href='../../../grails/boot/config/GrailsApplicationPostProcessor.html' title='GrailsApplicationPostProcessor'>GrailsApplicationPostProcessor</a> reuses them instead of rebuilding and skips the already-drained
+ plugin runtime configuration.
+  <DL><DT><B>Since:</B></DT><DD>8.0</DD></DL></p>
 
           </li>
     </ul>
@@ -120,72 +155,41 @@ extends <a href='../../../grails/boot/config/GrailsApplicationPostProcessor.html
         
             <ul class="blockList">
                 <li class="blockList"><a name="field_summary"><!--   --></a>
+                    <h3>Field Summary</h3>
                     <ul class="blockList">
-                    <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Inherited fields summary table">
-                        <caption><span>Inherited fields</span><span class="tabEnd">&nbsp;</span></caption>
+                    <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Enum constants summary table">
+                        <caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
                         <tr>
-                            <th class="colFirst" scope="col">Fields inherited from class</th>
-                            <th class="colLast" scope="col">Fields</th>
-                        </tr>
-                                                <tr class="altColor">
-                            <td class="colFirst"><strong><code>class <a href='../../../grails/boot/config/GrailsApplicationPostProcessor.html'>GrailsApplicationPostProcessor</a></code></strong></td>
-                            <td class="colLast"><code><a href='../../../grails/boot/config/GrailsApplicationPostProcessor.html#applicationContext'>applicationContext</a>, <a href='../../../grails/boot/config/GrailsApplicationPostProcessor.html#pluginManager'>pluginManager</a></code></td>
-                        </tr>
-
-                    </table>
-                    </ul>
-                </li>
-                
-            </ul>
-        
-
-        <!-- =========== PROPERTY SUMMARY =========== -->
-        
-         <ul class="blockList"> 
-                <li class="blockList"><a name="property_summary"><!--   --></a>
-                    <h3>Properties Summary</h3>
-                    <ul class="blockList">
-                    <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Properties Summary table, listing nested classes, and an explanation">
-                        <caption><span>Properties</span><span class="tabEnd">&nbsp;</span></caption>
-                        <tr>
-                            <th class="colFirst" scope="col">Type</th>
-                            <th class="colLast" scope="col">Name and description</th>
+                            <th class="colFirst" scope="col">Modifiers</th>
+                            <th class="colLast" scope="col">Name</th>
+                            <th class="colLast" scope="col">Description</th>
                         </tr>
                         
                         <tr class="altColor">
-                            <td class="colFirst"><code><strong>groovy.lang.Closure</strong></code>&nbsp;</td>
-                            <td class="colLast"><code><a href="#customizeGrailsApplicationClosure">customizeGrailsApplicationClosure</a></code><br></td>
+                            <td class="colFirst"><code><strong>static&nbsp;java.lang.String</strong></code>&nbsp;</td>
+                            <td class="colLast"><code><a href="#APPLICATION_SOURCE_CLASSES_BEAN_NAME">APPLICATION_SOURCE_CLASSES_BEAN_NAME</a></code></td>
+                            <td class="colLast">Name of the <CODE>Class[]</CODE> singleton under which <a href='../../../grails/boot/GrailsApp.html' title='GrailsApp'>GrailsApp</a> stashes the
+ application source classes so this phase can perform early artefact discovery.</td>
                         </tr>
                         
                         <tr class="rowColor">
-                            <td class="colFirst"><code><strong>boolean</strong></code>&nbsp;</td>
-                            <td class="colLast"><code><a href="#localOverride">localOverride</a></code><br></td>
+                            <td class="colFirst"><code><strong>static&nbsp;java.lang.String</strong></code>&nbsp;</td>
+                            <td class="colLast"><code><a href="#EARLY_REGISTRATION_COMPLETE_BEAN_NAME">EARLY_REGISTRATION_COMPLETE_BEAN_NAME</a></code></td>
+                            <td class="colLast">Name of the marker singleton registered once this phase has completed, checked by
+ <a href='../../../grails/boot/config/GrailsApplicationPostProcessor.html' title='GrailsApplicationPostProcessor'>GrailsApplicationPostProcessor</a> to reuse the promoted singletons and skip the
+ already-performed lifecycle steps. </td>
                         </tr>
                         
                     </table>
                    </ul>
                 </li>
                 
-                 <li class="blockList"><a name="properties_summary"><!--   --></a>
-                     <ul class="blockList">
-                         <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Inherited properties summary table">
-                             <caption><span>Inherited properties</span><span class="tabEnd">&nbsp;</span></caption>
-                             <tr>
-                                 <th class="colFirst" scope="col">Properties inherited from class</th>
-                                 <th class="colLast" scope="col">Properties</th>
-                             </tr>
-                                                     <tr class="altColor">
-                                <td class="colFirst"><strong><code>class <a href='../../../grails/boot/config/GrailsApplicationPostProcessor.html'>GrailsApplicationPostProcessor</a></code></strong></td>
-                                <td class="colLast"><code>RELOADING_ENABLED, applicationClass, classes, grailsApplication, lifeCycle, loadExternalBeans, reloadingEnabled</code></td>
-                            </tr>
-
-                         </table>
-                     </ul>
-                 </li>
-                 
             </ul>
         
 
+        <!-- =========== PROPERTY SUMMARY =========== -->
+        
+
         <!-- =========== ELEMENT SUMMARY =========== -->
         
 
@@ -203,7 +207,7 @@ extends <a href='../../../grails/boot/config/GrailsApplicationPostProcessor.html
                         
                         <tr class="altColor">
                             <td class="colFirst">
-                                <code><strong><a href="#TestRuntimeGrailsApplicationPostProcessor(groovy.lang.Closure, org.apache.grails.core.plugins.PluginDiscovery)">TestRuntimeGrailsApplicationPostProcessor</a></strong>(groovy.lang.Closure doWithSpringClosure, <a href='../../../org/apache/grails/core/plugins/PluginDiscovery.html'>PluginDiscovery</a> pluginDiscovery)</code><br></td>
+                                <code><strong><a href="#GrailsEarlyPluginRegistrationPostProcessor(org.springframework.context.ConfigurableApplicationContext)">GrailsEarlyPluginRegistrationPostProcessor</a></strong>(<a href='../../../org.springframework.context.ConfigurableApplicationContext.html'>ConfigurableApplicationContext</a> applicationContext)</code><br></td>
                         </tr>
                         
                     </table>
@@ -229,13 +233,13 @@ extends <a href='../../../grails/boot/config/GrailsApplicationPostProcessor.html
                         
                         <tr class="altColor">
                             <td class="colFirst"><code></code></td>
-                            <td class="colLast"><code>protected&nbsp;void</code></td>
-                            <td class="colLast"><code><strong><a href="#customizeGrailsApplication(grails.core.GrailsApplication)">customizeGrailsApplication</a></strong>(<a href='../../../grails/core/GrailsApplication.html'>GrailsApplication</a> grailsApplication)</code><br></td>
+                            <td class="colLast"><code>public&nbsp;void</code></td>
+                            <td class="colLast"><code><strong><a href="#onApplicationEvent(org.springframework.context.event.ContextRefreshedEvent)">onApplicationEvent</a></strong>(<a href='../../../org.springframework.context.event.ContextRefreshedEvent.html'>ContextRefreshedEvent</a> event)</code><br></td>
                         </tr>
                         
                         <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
-                            <td class="colLast"><code>void</code></td>
+                            <td class="colLast"><code>public&nbsp;void</code></td>
                             <td class="colLast"><code><strong><a href="#postProcessBeanDefinitionRegistry(org.springframework.beans.factory.support.BeanDefinitionRegistry)">postProcessBeanDefinitionRegistry</a></strong>(<a href='../../../org.springframework.beans.factory.support.BeanDefinitionRegistry.html'>BeanDefinitionRegistry</a> registry)</code><br></td>
                         </tr>
                         
@@ -254,8 +258,8 @@ extends <a href='../../../grails/boot/config/GrailsApplicationPostProcessor.html
                         </tr>
                         
                         <tr class="altColor">
-                            <td class="colFirst"><code>class <a href='../../../grails/boot/config/GrailsApplicationPostProcessor.html'>GrailsApplicationPostProcessor</a></code></td>
-                            <td class="colLast"><code><a href='../../../grails/boot/config/GrailsApplicationPostProcessor.html#customizeGrailsApplication(grails.core.GrailsApplication)'>customizeGrailsApplication</a>, <a href='../../../grails/boot/config/GrailsApplicationPostProcessor.html#initializeGrailsApplication(org.springframework.context.ApplicationContext)'>initializeGrailsApplication</a>, <a href='../../../grails/boot/config/GrailsApplicationPostProcessor.html#loadApplicationCon [...]
+                            <td class="colFirst"><code>class java.lang.Object</code></td>
+                            <td class="colLast"><code>java.lang.Object#equals(java.lang.Object), java.lang.Object#getClass(), java.lang.Object#hashCode(), java.lang.Object#notify(), java.lang.Object#notifyAll(), java.lang.Object#toString(), java.lang.Object#wait(), java.lang.Object#wait(long), java.lang.Object#wait(long, int)</code></td>
                         </tr>
                     </table>
                    </ul>
@@ -273,28 +277,31 @@ extends <a href='../../../grails/boot/config/GrailsApplicationPostProcessor.html
            
 
             
-
-            
-            <!-- =========== PROPERTY DETAIL =========== -->
+            <!-- =========== FIELD DETAIL =========== -->
             <ul class="blockList">
-                <li class="blockList"><a name="prop_detail">
+                <li class="blockList"><a name="field_detail">
                     <!--   -->
                 </a>
-                    <h3>Property Detail</h3>
+                    <h3>Field Detail</h3>
                     
-                        <a name="customizeGrailsApplicationClosure"><!-- --></a>
+                        <a name="APPLICATION_SOURCE_CLASSES_BEAN_NAME"><!-- --></a>
                         <ul class="blockListLast">
                             <li class="blockList">
-                                <h4>groovy.lang.Closure <strong>customizeGrailsApplicationClosure</strong></h4>
-                                <p></p>
+                                <h4>public&nbsp;static&nbsp;final&nbsp;java.lang.String <strong>APPLICATION_SOURCE_CLASSES_BEAN_NAME</strong></h4>
+                                <p> Name of the <CODE>Class[]</CODE> singleton under which <a href='../../../grails/boot/GrailsApp.html' title='GrailsApp'>GrailsApp</a> stashes the
+ application source classes so this phase can perform early artefact discovery.
+     </p>
                             </li>
                         </ul>
                     
-                        <a name="localOverride"><!-- --></a>
+                        <a name="EARLY_REGISTRATION_COMPLETE_BEAN_NAME"><!-- --></a>
                         <ul class="blockListLast">
                             <li class="blockList">
-                                <h4>boolean <strong>localOverride</strong></h4>
-                                <p></p>
+                                <h4>public&nbsp;static&nbsp;final&nbsp;java.lang.String <strong>EARLY_REGISTRATION_COMPLETE_BEAN_NAME</strong></h4>
+                                <p> Name of the marker singleton registered once this phase has completed, checked by
+ <a href='../../../grails/boot/config/GrailsApplicationPostProcessor.html' title='GrailsApplicationPostProcessor'>GrailsApplicationPostProcessor</a> to reuse the promoted singletons and skip the
+ already-performed lifecycle steps. Always checked on the local bean factory only.
+     </p>
                             </li>
                         </ul>
                     
@@ -305,6 +312,8 @@ extends <a href='../../../grails/boot/config/GrailsApplicationPostProcessor.html
             
 
             
+
+            
             <!-- =========== CONSTRUCTOR DETAIL =========== -->
             <ul class="blockList">
                 <li class="blockList"><a name="constructor_detail">
@@ -312,10 +321,10 @@ extends <a href='../../../grails/boot/config/GrailsApplicationPostProcessor.html
                 </a>
                     <h3>Constructor Detail</h3>
                     
-                        <a name="TestRuntimeGrailsApplicationPostProcessor(groovy.lang.Closure, org.apache.grails.core.plugins.PluginDiscovery)"><!-- --></a>
+                        <a name="GrailsEarlyPluginRegistrationPostProcessor(org.springframework.context.ConfigurableApplicationContext)"><!-- --></a>
                         <ul class="blockListLast">
                             <li class="blockList">
-                                <h4><strong>TestRuntimeGrailsApplicationPostProcessor</strong>(groovy.lang.Closure doWithSpringClosure, <a href='../../../org/apache/grails/core/plugins/PluginDiscovery.html'>PluginDiscovery</a> pluginDiscovery)</h4>
+                                <h4>public&nbsp;<strong>GrailsEarlyPluginRegistrationPostProcessor</strong>(<a href='../../../org.springframework.context.ConfigurableApplicationContext.html'>ConfigurableApplicationContext</a> applicationContext)</h4>
                                 <p></p>
                             </li>
                         </ul>
@@ -333,10 +342,10 @@ extends <a href='../../../grails/boot/config/GrailsApplicationPostProcessor.html
                 </a>
                     <h3>Method Detail</h3>
                     
-                        <a name="customizeGrailsApplication(grails.core.GrailsApplication)"><!-- --></a>
+                        <a name="onApplicationEvent(org.springframework.context.event.ContextRefreshedEvent)"><!-- --></a>
                         <ul class="blockListLast">
                             <li class="blockList">
-                                <h4>@java.lang.Override<br>protected&nbsp;void <strong>customizeGrailsApplication</strong>(<a href='../../../grails/core/GrailsApplication.html'>GrailsApplication</a> grailsApplication)</h4>
+                                <h4>@java.lang.Override<br>public&nbsp;void <strong>onApplicationEvent</strong>(<a href='../../../org.springframework.context.event.ContextRefreshedEvent.html'>ContextRefreshedEvent</a> event)</h4>
                                 <p></p>
                             </li>
                         </ul>
@@ -344,7 +353,7 @@ extends <a href='../../../grails/boot/config/GrailsApplicationPostProcessor.html
                         <a name="postProcessBeanDefinitionRegistry(org.springframework.beans.factory.support.BeanDefinitionRegistry)"><!-- --></a>
                         <ul class="blockListLast">
                             <li class="blockList">
-                                <h4>@java.lang.Override<br>void <strong>postProcessBeanDefinitionRegistry</strong>(<a href='../../../org.springframework.beans.factory.support.BeanDefinitionRegistry.html'>BeanDefinitionRegistry</a> registry)</h4>
+                                <h4>@java.lang.Override<br>public&nbsp;void <strong>postProcessBeanDefinitionRegistry</strong>(<a href='../../../org.springframework.beans.factory.support.BeanDefinitionRegistry.html'>BeanDefinitionRegistry</a> registry)</h4>
                                 <p></p>
                             </li>
                         </ul>
@@ -376,18 +385,18 @@ extends <a href='../../../grails/boot/config/GrailsApplicationPostProcessor.html
 <div class="subNav">
     <div>
         <ul class="navList">
-            <li><a href="../../../index.html?org/grails/testing/GrailsApplicationBuilder.TestRuntimeGrailsApplicationPostProcessor" target="_top">Frames</a></li>
-            <li><a href="GrailsApplicationBuilder.TestRuntimeGrailsApplicationPostProcessor.html" target="_top">No Frames</a></li>
+            <li><a href="../../../index.html?grails/boot/config/GrailsEarlyPluginRegistrationPostProcessor" target="_top">Frames</a></li>
+            <li><a href="GrailsEarlyPluginRegistrationPostProcessor.html" target="_top">No Frames</a></li>
         </ul>
     </div>
     <div>
         <ul class="subNavList">
             <li>Summary:&nbsp;</li>
-            Nested&nbsp;&nbsp;&nbsp;Field&nbsp;&nbsp;&nbsp;<li><a href="#property_summary">Property</a></li>&nbsp;&nbsp;&nbsp;<li><a href="#constructor_summary">Constructor</a></li>&nbsp;&nbsp;&nbsp;<li><a href="#method_summary">Method</a></li>&nbsp;&nbsp;&nbsp;
+            Nested&nbsp;&nbsp;&nbsp;<li><a href="#field_summary">Field</a></li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<li><a href="#constructor_summary">Constructor</a></li>&nbsp;&nbsp;&nbsp;<li><a href="#method_summary">Method</a></li>&nbsp;&nbsp;&nbsp;
         </ul>
         <ul class="subNavList">
             <li>&nbsp;|&nbsp;Detail:&nbsp;</li>
-            Field&nbsp;&nbsp;&nbsp;<li><a href="#prop_detail">Property</a></li>&nbsp;&nbsp;&nbsp;<li><a href="#constructor_detail">Constructor</a></li>&nbsp;&nbsp;&nbsp;<li><a href="#method_detail">Method</a></li>&nbsp;&nbsp;&nbsp;
+            <li><a href="#field_detail">Field</a></li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<li><a href="#constructor_detail">Constructor</a></li>&nbsp;&nbsp;&nbsp;<li><a href="#method_detail">Method</a></li>&nbsp;&nbsp;&nbsp;
         </ul>
     </div>
     <p><!-- Matomo -->
diff --git a/docs/snapshot/api/grails/ui/support/DevelopmentGrailsApplication.html b/docs/snapshot/api/grails/boot/config/GrailsPluginLifecycleInitializer.html
similarity index 52%
copy from docs/snapshot/api/grails/ui/support/DevelopmentGrailsApplication.html
copy to docs/snapshot/api/grails/boot/config/GrailsPluginLifecycleInitializer.html
index 4732e6808fa..ce2be4f4554 100644
--- a/docs/snapshot/api/grails/ui/support/DevelopmentGrailsApplication.html
+++ b/docs/snapshot/api/grails/boot/config/GrailsPluginLifecycleInitializer.html
@@ -27,7 +27,7 @@
 <html>
 <head>
     <!-- Generated by groovydoc (5.0.7) -->
-    <title>DevelopmentGrailsApplication (Grails 8.0.0-SNAPSHOT)</title>
+    <title>GrailsPluginLifecycleInitializer (Grails 8.0.0-SNAPSHOT)</title>
     
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     <link href="../../../groovy.ico" type="image/x-icon" rel="shortcut icon">
@@ -37,7 +37,7 @@
 <body class="center">
 <script type="text/javascript"><!--
 if (location.href.indexOf('is-external=true') == -1) {
-    parent.document.title="DevelopmentGrailsApplication (Grails 8.0.0-SNAPSHOT)";
+    parent.document.title="GrailsPluginLifecycleInitializer (Grails 8.0.0-SNAPSHOT)";
 }
 //-->
 </script>
@@ -63,18 +63,18 @@ if (location.href.indexOf('is-external=true') == -1) {
 <div class="subNav">
     <div>
         <ul class="navList">
-            <li><a href="../../../index.html?grails/ui/support/DevelopmentGrailsApplication" target="_top">Frames</a></li>
-            <li><a href="DevelopmentGrailsApplication.html" target="_top">No Frames</a></li>
+            <li><a href="../../../index.html?grails/boot/config/GrailsPluginLifecycleInitializer" target="_top">Frames</a></li>
+            <li><a href="GrailsPluginLifecycleInitializer.html" target="_top">No Frames</a></li>
         </ul>
     </div>
     <div>
         <ul class="subNavList">
             <li>Summary:&nbsp;</li>
-            Nested&nbsp;&nbsp;&nbsp;Field&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<li><a href="#constructor_summary">Constructor</a></li>&nbsp;&nbsp;&nbsp;<li><a href="#method_summary">Method</a></li>&nbsp;&nbsp;&nbsp;
+            Nested&nbsp;&nbsp;&nbsp;Field&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructor&nbsp;&nbsp;&nbsp;<li><a href="#method_summary">Method</a></li>&nbsp;&nbsp;&nbsp;
         </ul>
         <ul class="subNavList">
             <li>&nbsp;|&nbsp;Detail:&nbsp;</li>
-            Field&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<li><a href="#constructor_detail">Constructor</a></li>&nbsp;&nbsp;&nbsp;<li><a href="#method_detail">Method</a></li>&nbsp;&nbsp;&nbsp;
+            Field&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructor&nbsp;&nbsp;&nbsp;<li><a href="#method_detail">Method</a></li>&nbsp;&nbsp;&nbsp;
         </ul>
     </div>
     <a name="skip-navbar_top">
@@ -85,27 +85,38 @@ if (location.href.indexOf('is-external=true') == -1) {
 <!-- ======== START OF CLASS DATA ======== -->
 <div class="header">
 
-    <div class="subTitle">Package: <strong>grails.ui.support</strong></div>
+    <div class="subTitle">Package: <strong>grails.boot.config</strong></div>
 
-    <h2 title="[Groovy] Class DevelopmentGrailsApplication" class="title">[Groovy] Class DevelopmentGrailsApplication</h2>
+    <h2 title="[Java] Class GrailsPluginLifecycleInitializer" class="title">[Java] Class GrailsPluginLifecycleInitializer</h2>
 </div>
 <div class="contentContainer">
 <ul class="inheritance">
-<li><ul class="inheritance"></ul></li><li><ul class="inheritance"></ul></li><li><ul class="inheritance"></ul></li><li>grails.ui.support.DevelopmentGrailsApplication
+<li><ul class="inheritance"></ul></li><li>grails.boot.config.GrailsPluginLifecycleInitializer
 </ul>
 <div class="description">
     <ul class="blockList">
         <li class="blockList">
 
+            <dl>
+                <dt>All Implemented Interfaces and Traits:</dt>
+                <dd><a href='../../../org.springframework.context.ApplicationContextInitializer.html'>ApplicationContextInitializer</a></dd>
+            </dl>
+    
 
             <!-- todo: direct known subclasses -->
             <hr>
 
-<pre>@groovy.transform.CompileStatic
-class DevelopmentGrailsApplication
-extends <a href='../../../grails/boot/GrailsApp.html'>GrailsApp</a></pre>
+<pre>public class GrailsPluginLifecycleInitializer
+extends java.lang.Object
+implements <a href='../../../org.springframework.context.ApplicationContextInitializer.html'>ApplicationContextInitializer</a></pre>
 
-    <p> <DL><DT><B>Authors:</B></DT><DD>Graeme Rocher</DD></DL><DL><DT><B>Since:</B></DT><DD>3.0</DD></DL></p>
+    <p> Registers the <a href='../../../grails/boot/config/GrailsEarlyPluginRegistrationPostProcessor.html' title='GrailsEarlyPluginRegistrationPostProcessor'>GrailsEarlyPluginRegistrationPostProcessor</a> on the context via
+ <CODE>addBeanFactoryPostProcessor</CODE>, which guarantees it runs ahead of Spring Boot's
+ registry-discovered post-processors (including <CODE>ConfigurationClassPostProcessor</CODE>,
+ which expands auto-configuration). That ordering is what lets plugin beans contributed via
+ <CODE>doWithSpring</CODE> be present in the registry before Boot's <CODE>@ConditionalOnMissingBean</CODE>
+ guards are evaluated, so auto-configured defaults back off in favour of plugin beans.
+  <DL><DT><B>Since:</B></DT><DD>8.0</DD></DL></p>
 
           </li>
     </ul>
@@ -124,52 +135,11 @@ extends <a href='../../../grails/boot/GrailsApp.html'>GrailsApp</a></pre>
 
         <!-- =========== PROPERTY SUMMARY =========== -->
         
-         <ul class="blockList"> 
-                 <li class="blockList"><a name="properties_summary"><!--   --></a>
-                     <ul class="blockList">
-                         <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Inherited properties summary table">
-                             <caption><span>Inherited properties</span><span class="tabEnd">&nbsp;</span></caption>
-                             <tr>
-                                 <th class="colFirst" scope="col">Properties inherited from class</th>
-                                 <th class="colLast" scope="col">Properties</th>
-                             </tr>
-                                                     <tr class="altColor">
-                                <td class="colFirst"><strong><code>class <a href='../../../grails/boot/GrailsApp.html'>GrailsApp</a></code></strong></td>
-                                <td class="colLast"><code>configuredEnvironment, developmentModeActive, enableBeanCreationProfiler</code></td>
-                            </tr>
-
-                         </table>
-                     </ul>
-                 </li>
-                 
-            </ul>
-        
 
         <!-- =========== ELEMENT SUMMARY =========== -->
         
 
         
-        <!-- ======== CONSTRUCTOR SUMMARY ======== -->
-        <ul class="blockList">
-                <li class="blockList"><a name="constructor_summary"><!--   --></a>
-                    <h3>Constructor Summary</h3>
-                    <ul class="blockList">
-                    <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructors Summary table">
-                        <caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
-                        <tr>
-                            <th class="colFirst" scope="col">Constructor and description</th>
-                        </tr>
-                        
-                        <tr class="altColor">
-                            <td class="colFirst">
-                                <code>protected&nbsp;<strong><a href="#DevelopmentGrailsApplication(Class)">DevelopmentGrailsApplication</a></strong>(java.lang.Class&lt;?&gt;[] sources)</code><br></td>
-                        </tr>
-                        
-                    </table>
-                   </ul>
-              </li>
-        </ul>
-        
 
         
         <!-- ========== METHOD SUMMARY =========== -->
@@ -188,8 +158,8 @@ extends <a href='../../../grails/boot/GrailsApp.html'>GrailsApp</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code></code></td>
-                            <td class="colLast"><code>protected&nbsp;java.lang.Object</code></td>
-                            <td class="colLast"><code><strong><a href="#configureApplicationContextClass()">configureApplicationContextClass</a></strong>()</code><br></td>
+                            <td class="colLast"><code>public&nbsp;void</code></td>
+                            <td class="colLast"><code><strong><a href="#initialize(org.springframework.context.ConfigurableApplicationContext)">initialize</a></strong>(<a href='../../../org.springframework.context.ConfigurableApplicationContext.html'>ConfigurableApplicationContext</a> applicationContext)</code><br></td>
                         </tr>
                         
                     </table>
@@ -207,8 +177,8 @@ extends <a href='../../../grails/boot/GrailsApp.html'>GrailsApp</a></pre>
                         </tr>
                         
                         <tr class="altColor">
-                            <td class="colFirst"><code>class <a href='../../../grails/boot/GrailsApp.html'>GrailsApp</a></code></td>
-                            <td class="colLast"><code><a href='../../../grails/boot/GrailsApp.html#compileGroovyFile(org.codehaus.groovy.control.CompilerConfiguration, java.io.File)'>compileGroovyFile</a>, <a href='../../../grails/boot/GrailsApp.html#configureCliPidFileWriter()'>configureCliPidFileWriter</a>, <a href='../../../grails/boot/GrailsApp.html#configureDirectoryWatcher(org.grails.io.watch.DirectoryWatcher, java.lang.String)'>configureDirectoryWatcher</a>, <a href='../../../grai [...]
+                            <td class="colFirst"><code>class java.lang.Object</code></td>
+                            <td class="colLast"><code>java.lang.Object#equals(java.lang.Object), java.lang.Object#getClass(), java.lang.Object#hashCode(), java.lang.Object#notify(), java.lang.Object#notifyAll(), java.lang.Object#toString(), java.lang.Object#wait(), java.lang.Object#wait(long), java.lang.Object#wait(long, int)</code></td>
                         </tr>
                     </table>
                    </ul>
@@ -232,24 +202,6 @@ extends <a href='../../../grails/boot/GrailsApp.html'>GrailsApp</a></pre>
             
 
             
-            <!-- =========== CONSTRUCTOR DETAIL =========== -->
-            <ul class="blockList">
-                <li class="blockList"><a name="constructor_detail">
-                    <!--   -->
-                </a>
-                    <h3>Constructor Detail</h3>
-                    
-                        <a name="DevelopmentGrailsApplication(Class)"><!-- --></a>
-                        <ul class="blockListLast">
-                            <li class="blockList">
-                                <h4>protected&nbsp;<strong>DevelopmentGrailsApplication</strong>(java.lang.Class&lt;?&gt;[] sources)</h4>
-                                <p></p>
-                            </li>
-                        </ul>
-                    
-                </li>
-            </ul>
-            
 
 
             
@@ -260,10 +212,10 @@ extends <a href='../../../grails/boot/GrailsApp.html'>GrailsApp</a></pre>
                 </a>
                     <h3>Method Detail</h3>
                     
-                        <a name="configureApplicationContextClass()"><!-- --></a>
+                        <a name="initialize(org.springframework.context.ConfigurableApplicationContext)"><!-- --></a>
                         <ul class="blockListLast">
                             <li class="blockList">
-                                <h4>protected&nbsp;java.lang.Object <strong>configureApplicationContextClass</strong>()</h4>
+                                <h4>@java.lang.Override<br>public&nbsp;void <strong>initialize</strong>(<a href='../../../org.springframework.context.ConfigurableApplicationContext.html'>ConfigurableApplicationContext</a> applicationContext)</h4>
                                 <p></p>
                             </li>
                         </ul>
@@ -295,18 +247,18 @@ extends <a href='../../../grails/boot/GrailsApp.html'>GrailsApp</a></pre>
 <div class="subNav">
     <div>
         <ul class="navList">
-            <li><a href="../../../index.html?grails/ui/support/DevelopmentGrailsApplication" target="_top">Frames</a></li>
-            <li><a href="DevelopmentGrailsApplication.html" target="_top">No Frames</a></li>
+            <li><a href="../../../index.html?grails/boot/config/GrailsPluginLifecycleInitializer" target="_top">Frames</a></li>
+            <li><a href="GrailsPluginLifecycleInitializer.html" target="_top">No Frames</a></li>
         </ul>
     </div>
     <div>
         <ul class="subNavList">
             <li>Summary:&nbsp;</li>
-            Nested&nbsp;&nbsp;&nbsp;Field&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<li><a href="#constructor_summary">Constructor</a></li>&nbsp;&nbsp;&nbsp;<li><a href="#method_summary">Method</a></li>&nbsp;&nbsp;&nbsp;
+            Nested&nbsp;&nbsp;&nbsp;Field&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructor&nbsp;&nbsp;&nbsp;<li><a href="#method_summary">Method</a></li>&nbsp;&nbsp;&nbsp;
         </ul>
         <ul class="subNavList">
             <li>&nbsp;|&nbsp;Detail:&nbsp;</li>
-            Field&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<li><a href="#constructor_detail">Constructor</a></li>&nbsp;&nbsp;&nbsp;<li><a href="#method_detail">Method</a></li>&nbsp;&nbsp;&nbsp;
+            Field&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructor&nbsp;&nbsp;&nbsp;<li><a href="#method_detail">Method</a></li>&nbsp;&nbsp;&nbsp;
         </ul>
     </div>
     <p><!-- Matomo -->
diff --git a/docs/snapshot/api/grails/boot/config/package-frame.html b/docs/snapshot/api/grails/boot/config/package-frame.html
index a74949a6dae..39d630aacec 100644
--- a/docs/snapshot/api/grails/boot/config/package-frame.html
+++ b/docs/snapshot/api/grails/boot/config/package-frame.html
@@ -43,7 +43,7 @@
 <div class="indexContainer">
     <h2>Classes</h2>
     <ul>
-        <li><a href="GrailsApplicationPostProcessor.html" title="class in grails.boot.config" target="classFrame">GrailsApplicationPostProcessor</a></li><li><a href="GrailsAutoConfiguration.html" title="class in grails.boot.config" target="classFrame">GrailsAutoConfiguration</a></li><li><a href="GrailsEnvironmentPostProcessor.html" title="class in grails.boot.config" target="classFrame">GrailsEnvironmentPostProcessor</a></li>
+        <li><a href="ApplicationArtefactScanner.html" title="class in grails.boot.config" target="classFrame">ApplicationArtefactScanner</a></li><li><a href="GrailsApplicationPostProcessor.html" title="class in grails.boot.config" target="classFrame">GrailsApplicationPostProcessor</a></li><li><a href="GrailsAutoConfiguration.html" title="class in grails.boot.config" target="classFrame">GrailsAutoConfiguration</a></li><li><a href="GrailsEarlyPluginRegistrationPostProcessor.html" title="cl [...]
     </ul>
 </div>
 
diff --git a/docs/snapshot/api/grails/boot/config/package-summary.html b/docs/snapshot/api/grails/boot/config/package-summary.html
index 97e3cc81f58..a1070c8a130 100644
--- a/docs/snapshot/api/grails/boot/config/package-summary.html
+++ b/docs/snapshot/api/grails/boot/config/package-summary.html
@@ -88,6 +88,15 @@ function windowTitle()
                         <th class="colFirst" scope="col">Class</th>
                         <th class="colLast" scope="col">Description</th>
                     </tr>
+<tr class="altColor">
+                            <td class="colOne">
+                                <strong><a href="ApplicationArtefactScanner.html" title="class in grails/boot/config">
+                                    ApplicationArtefactScanner
+                                </a></strong>
+                            </td>
+                            <td>Discovers the artefact classes that make up a Grails application by scanning the classpath relative
+ to an application class. </td>
+                        </tr>
 <tr class="altColor">
                             <td class="colOne">
                                 <strong><a href="GrailsApplicationPostProcessor.html" title="class in grails/boot/config">
@@ -104,6 +113,18 @@ function windowTitle()
                             </td>
                             <td>A base class for configurations that bootstrap a Grails application</td>
                         </tr>
+<tr class="altColor">
+                            <td class="colOne">
+                                <strong><a href="GrailsEarlyPluginRegistrationPostProcessor.html" title="class in grails/boot/config">
+                                    GrailsEarlyPluginRegistrationPostProcessor
+                                </a></strong>
+                            </td>
+                            <td>Runs the plugin bean-registration phase of the Grails lifecycle <em>before</em> Spring Boot's
+ auto-configuration is processed, so that beans contributed by plugins via <CODE>doWithSpring</CODE>
+ are already present in the registry when Boot evaluates its <CODE>@ConditionalOnMissingBean</CODE>
+ guards — auto-configured defaults then back off in favour of the plugin beans, without any
+ override or removal afterwards.</td>
+                        </tr>
 <tr class="altColor">
                             <td class="colOne">
                                 <strong><a href="GrailsEnvironmentPostProcessor.html" title="class in grails/boot/config">
@@ -114,6 +135,17 @@ function windowTitle()
  files from Grails plugins early in the application lifecycle, before autoconfiguration conditions
  (such as <CODE>@ConditionalOnProperty</CODE>) are evaluated.</td>
                         </tr>
+<tr class="altColor">
+                            <td class="colOne">
+                                <strong><a href="GrailsPluginLifecycleInitializer.html" title="class in grails/boot/config">
+                                    GrailsPluginLifecycleInitializer
+                                </a></strong>
+                            </td>
+                            <td>Registers the <a href='../../../grails/boot/config/GrailsEarlyPluginRegistrationPostProcessor.html' title='GrailsEarlyPluginRegistrationPostProcessor'>GrailsEarlyPluginRegistrationPostProcessor</a> on the context via
+ <CODE>addBeanFactoryPostProcessor</CODE>, which guarantees it runs ahead of Spring Boot's
+ registry-discovered post-processors (including <CODE>ConfigurationClassPostProcessor</CODE>,
+ which expands auto-configuration). </td>
+                        </tr>
 
                     </tbody>
                 </table>
diff --git a/docs/snapshot/api/grails/boot/config/tools/ProfilingGrailsApplicationPostProcessor.html b/docs/snapshot/api/grails/boot/config/tools/ProfilingGrailsApplicationPostProcessor.html
index 1318d8611e2..e59656cdb46 100644
--- a/docs/snapshot/api/grails/boot/config/tools/ProfilingGrailsApplicationPostProcessor.html
+++ b/docs/snapshot/api/grails/boot/config/tools/ProfilingGrailsApplicationPostProcessor.html
@@ -137,7 +137,7 @@ implements <a href='../../../../org.springframework.beans.factory.config.BeanPos
                         </tr>
                                                 <tr class="altColor">
                             <td class="colFirst"><strong><code>class <a href='../../../../grails/boot/config/GrailsApplicationPostProcessor.html'>GrailsApplicationPostProcessor</a></code></strong></td>
-                            <td class="colLast"><code><a href='../../../../grails/boot/config/GrailsApplicationPostProcessor.html#applicationContext'>applicationContext</a>, <a href='../../../../grails/boot/config/GrailsApplicationPostProcessor.html#pluginManager'>pluginManager</a></code></td>
+                            <td class="colLast"><code><a href='../../../../grails/boot/config/GrailsApplicationPostProcessor.html#applicationContext'>applicationContext</a>, <a href='../../../../grails/boot/config/GrailsApplicationPostProcessor.html#earlyPluginRegistrationRan'>earlyPluginRegistrationRan</a>, <a href='../../../../grails/boot/config/GrailsApplicationPostProcessor.html#pluginManager'>pluginManager</a></code></td>
                         </tr>
 
                     </table>
diff --git a/docs/snapshot/api/grails/core/DefaultGrailsApplication.html b/docs/snapshot/api/grails/core/DefaultGrailsApplication.html
index fb9129affef..62afd9f1c35 100644
--- a/docs/snapshot/api/grails/core/DefaultGrailsApplication.html
+++ b/docs/snapshot/api/grails/core/DefaultGrailsApplication.html
@@ -623,10 +623,16 @@ implements <a href='../../org.springframework.beans.factory.BeanClassLoaderAware
                         <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;void</code></td>
-                            <td class="colLast"><code><strong><a href="#setBeanClassLoader(java.lang.ClassLoader)">setBeanClassLoader</a></strong>(java.lang.ClassLoader classLoader)</code><br></td>
+                            <td class="colLast"><code><strong><a href="#setApplicationClass(grails.core.GrailsApplicationClass)">setApplicationClass</a></strong>(<a href='../../grails/core/GrailsApplicationClass.html'>GrailsApplicationClass</a> applicationClass)</code><br>Sets the application class. </td>
                         </tr>
                         
                         <tr class="altColor">
+                            <td class="colFirst"><code></code></td>
+                            <td class="colLast"><code>public&nbsp;void</code></td>
+                            <td class="colLast"><code><strong><a href="#setBeanClassLoader(java.lang.ClassLoader)">setBeanClassLoader</a></strong>(java.lang.ClassLoader classLoader)</code><br></td>
+                        </tr>
+                        
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;void</code></td>
                             <td class="colLast"><code><strong><a href="#setMappingContext(org.grails.datastore.mapping.model.MappingContext)">setMappingContext</a></strong>(<a href='../../org/grails/datastore/mapping/model/MappingContext.html'>MappingContext</a> mappingContext)</code><br></td>
@@ -1291,6 +1297,18 @@ implements <a href='../../org.springframework.beans.factory.BeanClassLoaderAware
                             </li>
                         </ul>
                     
+                        <a name="setApplicationClass(grails.core.GrailsApplicationClass)"><!-- --></a>
+                        <ul class="blockListLast">
+                            <li class="blockList">
+                                <h4>public&nbsp;void <strong>setApplicationClass</strong>(<a href='../../grails/core/GrailsApplicationClass.html'>GrailsApplicationClass</a> applicationClass)</h4>
+                                <p> Sets the application class. May be set once — to adopt the application class when this
+ instance was constructed before the <a href='../../grails/core/GrailsApplicationClass.html' title='GrailsApplicationClass'>GrailsApplicationClass</a> was known, e.g. during
+ early plugin registration ahead of Spring Boot auto-configuration — and cannot afterwards be
+ reassigned to a different application class.<DL><DT><B>throws:</B></DT><DD>IllegalStateException if a different application class has already been set</DD></DL>
+      <DL><DT><B>Parameters:</B></DT><DD><code>applicationClass</code> -  The application class</DD></DL><DL><DT><B>Since:</B></DT><DD>8.0</DD></DL></p>
+                            </li>
+                        </ul>
+                    
                         <a name="setBeanClassLoader(java.lang.ClassLoader)"><!-- --></a>
                         <ul class="blockListLast">
                             <li class="blockList">
diff --git a/docs/snapshot/api/grails/core/GrailsApplicationLifeCycle.html b/docs/snapshot/api/grails/core/GrailsApplicationLifeCycle.html
index 9bc72b6ed5e..fd0213ead14 100644
--- a/docs/snapshot/api/grails/core/GrailsApplicationLifeCycle.html
+++ b/docs/snapshot/api/grails/core/GrailsApplicationLifeCycle.html
@@ -104,7 +104,7 @@ if (location.href.indexOf('is-external=true') == -1) {
 
     <p> API which plugins implement to provide behavior in defined application lifecycle hooks.
 
- The <a href='../../grails/core/GrailsApplicationLifeCycle.html#doWithSpring()' title='GrailsApplicationLifeCycle.doWithSpring'>GrailsApplicationLifeCycle.doWithSpring</a> method can be used register Spring beans. <DL><DT><B>Since:</B></DT><DD>3.0</DD></DL><DL><DT><B>See Also:</B></DT><DD><a href='../../grails/plugins/Plugin.html' title='Plugin'>Plugin</a></DD></DL></p>
+ The <a href='../../grails/core/GrailsApplicationLifeCycle.html#beanRegistrar()' title='GrailsApplicationLifeCycle.beanRegistrar'>GrailsApplicationLifeCycle.beanRegistrar</a> method can be used to register Spring beans. <DL><DT><B>Since:</B></DT><DD>3.0</DD></DL><DL><DT><B>See Also:</B></DT><DD><a href='../../grails/plugins/Plugin.html' title='Plugin'>Plugin</a></DD></DL></p>
 
           </li>
     </ul>
@@ -145,36 +145,44 @@ if (location.href.indexOf('is-external=true') == -1) {
                         </tr>
                         
                         <tr class="altColor">
+                            <td class="colFirst"><code></code></td>
+                            <td class="colLast"><code><a href='../../org.springframework.beans.factory.BeanRegistrar.html'>BeanRegistrar</a></code></td>
+                            <td class="colLast"><code><strong><a href="#beanRegistrar()">beanRegistrar</a></strong>()</code><br>Sub classes should override to register beans with the Spring Framework
+ org.springframework.beans.factory.BeanRegistry using a BeanRegistrar.
+ </td>
+                        </tr>
+                        
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>abstract&nbsp;void</code></td>
                             <td class="colLast"><code><strong><a href="#doWithApplicationContext()">doWithApplicationContext</a></strong>()</code><br>Invoked once the org.springframework.context.ApplicationContext has been refreshed and after {#doWithDynamicMethods()} is invoked. </td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>abstract&nbsp;void</code></td>
                             <td class="colLast"><code><strong><a href="#doWithDynamicMethods()">doWithDynamicMethods</a></strong>()</code><br>Invoked once the org.springframework.context.ApplicationContext has been refreshed in a phase where plugins can add dynamic methods. </td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>abstract&nbsp;groovy.lang.Closure</code></td>
                             <td class="colLast"><code><strong><a href="#doWithSpring()">doWithSpring</a></strong>()</code><br>Sub classes should override to provide implementations</td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>abstract&nbsp;void</code></td>
                             <td class="colLast"><code><strong><a href="#onConfigChange(Map)">onConfigChange</a></strong>(java.util.Map&lt;java.lang.String, java.lang.Object&gt; event)</code><br>Invoked when the application configuration changes</td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>abstract&nbsp;void</code></td>
                             <td class="colLast"><code><strong><a href="#onShutdown(Map)">onShutdown</a></strong>(java.util.Map&lt;java.lang.String, java.lang.Object&gt; event)</code><br>Invoked when the org.springframework.context.ApplicationContext is closed</td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>abstract&nbsp;void</code></td>
                             <td class="colLast"><code><strong><a href="#onStartup(Map)">onStartup</a></strong>(java.util.Map&lt;java.lang.String, java.lang.Object&gt; event)</code><br>Invoked once all prior initialization hooks: <a href='../../grails/core/GrailsApplicationLifeCycle.html#doWithSpring()' title='GrailsApplicationLifeCycle.doWithSpring'>GrailsApplicationLifeCycle.doWithSpring</a>, <a href='../../grails/core/GrailsApplicationLifeCycle.html#doWithDynamicMethods()' title='Grail [...]
@@ -212,6 +220,19 @@ if (location.href.indexOf('is-external=true') == -1) {
                 </a>
                     <h3>Method Detail</h3>
                     
+                        <a name="beanRegistrar()"><!-- --></a>
+                        <ul class="blockListLast">
+                            <li class="blockList">
+                                <h4><a href='../../org.springframework.beans.factory.BeanRegistrar.html'>BeanRegistrar</a> <strong>beanRegistrar</strong>()</h4>
+                                <p> Sub classes should override to register beans with the Spring Framework
+ org.springframework.beans.factory.BeanRegistry using a BeanRegistrar.
+ This is the modern, Spring-native replacement for the <a href='#doWithSpring()'>doWithSpring()</a> bean builder DSL.
+
+ <p>The returned registrar is applied before Spring Boot auto-configuration is processed, so
+ beans registered here take precedence over Boot's <CODE>@ConditionalOnMissingBean</CODE> defaults.</p> <DL><DT><B>Returns:</B></DT><DD>A BeanRegistrar that registers beans, or <CODE>null</CODE> if none (the default)</DD></DL><DL><DT><B>Since:</B></DT><DD>8.0</DD></DL></p>
+                            </li>
+                        </ul>
+                    
                         <a name="doWithApplicationContext()"><!-- --></a>
                         <ul class="blockListLast">
                             <li class="blockList">
@@ -231,8 +252,10 @@ if (location.href.indexOf('is-external=true') == -1) {
                         <a name="doWithSpring()"><!-- --></a>
                         <ul class="blockListLast">
                             <li class="blockList">
-                                <h4>abstract&nbsp;groovy.lang.Closure <strong>doWithSpring</strong>()</h4>
-                                <p> Sub classes should override to provide implementations <DL><DT><B>Returns:</B></DT><DD>A closure that defines beans to be registered by Spring</DD></DL></p>
+                                <h4>@java.lang.Deprecated(since: 8.0)<br>abstract&nbsp;groovy.lang.Closure <strong>doWithSpring</strong>()</h4>
+                                <p> Sub classes should override to provide implementations<DL><DT><B>deprecated:</B></DT><DD>since 8.0 in favour of <a href='#beanRegistrar()'>beanRegistrar()</a>. The underlying bean builder DSL
+ remains available but is no longer actively supported and will not receive fixes for new
+ issues — you are strongly urged to migrate to <a href='#beanRegistrar()'>beanRegistrar()</a>.</DD></DL> <DL><DT><B>Returns:</B></DT><DD>A closure that defines beans to be registered by Spring</DD></DL></p>
                             </li>
                         </ul>
                     
diff --git a/docs/snapshot/api/grails/mongodb/bootstrap/MongoDbDataStoreSpringInitializer.html b/docs/snapshot/api/grails/mongodb/bootstrap/MongoDbDataStoreSpringInitializer.html
index c687469a360..8e61dd2881c 100644
--- a/docs/snapshot/api/grails/mongodb/bootstrap/MongoDbDataStoreSpringInitializer.html
+++ b/docs/snapshot/api/grails/mongodb/bootstrap/MongoDbDataStoreSpringInitializer.html
@@ -195,7 +195,7 @@ extends <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreI
                         </tr>
                                                 <tr class="altColor">
                             <td class="colFirst"><strong><code>class <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html'>AbstractDatastoreInitializer</a></code></strong></td>
-                            <td class="colLast"><code><a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#ENTITY_CLASS_RESOURCE_PATTERN'>ENTITY_CLASS_RESOURCE_PATTERN</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#OSIV_CLASS_NAME'>OSIV_CLASS_NAME</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#TRANSACTION_MANAGER_BEAN'>TRANSACTION_MANAGER_BEAN</a>, <a href='../.. [...]
+                            <td class="colLast"><code><a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#ENTITY_CLASS_RESOURCE_PATTERN'>ENTITY_CLASS_RESOURCE_PATTERN</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#OSIV_CLASS_NAME'>OSIV_CLASS_NAME</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#TRANSACTION_MANAGER_BEAN'>TRANSACTION_MANAGER_BEAN</a>, <a href='../.. [...]
                         </tr>
 
                     </table>
@@ -345,7 +345,7 @@ extends <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreI
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html'>AbstractDatastoreInitializer</a></code></td>
-                            <td class="colLast"><code><a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#collectMappedClasses(java.lang.String)'>collectMappedClasses</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#configure()'>configure</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#configureForBeanDefinitionRegistry(org.springframework.beans.factory.support.Bea [...]
+                            <td class="colLast"><code><a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#collectMappedClasses(java.lang.String)'>collectMappedClasses</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#configure()'>configure</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#configureForBeanDefinitionRegistry(org.springframework.beans.factory.support.Bea [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/grails/orm/bootstrap/HibernateDatastoreSpringInitializer.html b/docs/snapshot/api/grails/orm/bootstrap/HibernateDatastoreSpringInitializer.html
index b318eb5bfa2..4d1706cd9fb 100644
--- a/docs/snapshot/api/grails/orm/bootstrap/HibernateDatastoreSpringInitializer.html
+++ b/docs/snapshot/api/grails/orm/bootstrap/HibernateDatastoreSpringInitializer.html
@@ -170,7 +170,7 @@ extends <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreI
                         </tr>
                                                 <tr class="altColor">
                             <td class="colFirst"><strong><code>class <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html'>AbstractDatastoreInitializer</a></code></strong></td>
-                            <td class="colLast"><code><a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#ENTITY_CLASS_RESOURCE_PATTERN'>ENTITY_CLASS_RESOURCE_PATTERN</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#OSIV_CLASS_NAME'>OSIV_CLASS_NAME</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#TRANSACTION_MANAGER_BEAN'>TRANSACTION_MANAGER_BEAN</a>, <a href='../.. [...]
+                            <td class="colLast"><code><a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#ENTITY_CLASS_RESOURCE_PATTERN'>ENTITY_CLASS_RESOURCE_PATTERN</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#OSIV_CLASS_NAME'>OSIV_CLASS_NAME</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#TRANSACTION_MANAGER_BEAN'>TRANSACTION_MANAGER_BEAN</a>, <a href='../.. [...]
                         </tr>
 
                     </table>
@@ -361,7 +361,7 @@ extends <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreI
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html'>AbstractDatastoreInitializer</a></code></td>
-                            <td class="colLast"><code><a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#collectMappedClasses(java.lang.String)'>collectMappedClasses</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#configure()'>configure</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#configureForBeanDefinitionRegistry(org.springframework.beans.factory.support.Bea [...]
+                            <td class="colLast"><code><a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#collectMappedClasses(java.lang.String)'>collectMappedClasses</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#configure()'>configure</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#configureForBeanDefinitionRegistry(org.springframework.beans.factory.support.Bea [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/grails/plugin/cache/CacheGrailsPlugin.html b/docs/snapshot/api/grails/plugin/cache/CacheGrailsPlugin.html
index bca1051c5a6..e286f506290 100644
--- a/docs/snapshot/api/grails/plugin/cache/CacheGrailsPlugin.html
+++ b/docs/snapshot/api/grails/plugin/cache/CacheGrailsPlugin.html
@@ -276,7 +276,7 @@ extends <a href='../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../grails/plugins/Plugin.html#getApplicationContext()'>getAppl [...]
+                            <td class="colLast"><code><a href='../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</ [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/grails/plugin/formfields/FieldsGrailsPlugin.html b/docs/snapshot/api/grails/plugin/formfields/FieldsGrailsPlugin.html
index 251736f512b..94e1c733316 100644
--- a/docs/snapshot/api/grails/plugin/formfields/FieldsGrailsPlugin.html
+++ b/docs/snapshot/api/grails/plugin/formfields/FieldsGrailsPlugin.html
@@ -254,7 +254,7 @@ extends <a href='../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../grails/plugins/Plugin.html#getApplicationContext()'>getAppl [...]
+                            <td class="colLast"><code><a href='../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</ [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/grails/plugin/geb/GebGrailsPlugin.html b/docs/snapshot/api/grails/plugin/geb/GebGrailsPlugin.html
index 9787386d4d1..d9e12f6bf57 100644
--- a/docs/snapshot/api/grails/plugin/geb/GebGrailsPlugin.html
+++ b/docs/snapshot/api/grails/plugin/geb/GebGrailsPlugin.html
@@ -270,7 +270,7 @@ extends <a href='../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../grails/plugins/Plugin.html#getApplicationContext()'>getAppl [...]
+                            <td class="colLast"><code><a href='../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</ [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/grails/plugin/hibernate/HibernateGrailsPlugin.html b/docs/snapshot/api/grails/plugin/hibernate/HibernateGrailsPlugin.html
index 2848a5755f2..7a46db549a0 100644
--- a/docs/snapshot/api/grails/plugin/hibernate/HibernateGrailsPlugin.html
+++ b/docs/snapshot/api/grails/plugin/hibernate/HibernateGrailsPlugin.html
@@ -339,7 +339,7 @@ extends <a href='../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../grails/plugins/Plugin.html#getApplicationContext()'>getAppl [...]
+                            <td class="colLast"><code><a href='../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</ [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/grails/plugin/json/view/JsonViewGrailsPlugin.html b/docs/snapshot/api/grails/plugin/json/view/JsonViewGrailsPlugin.html
index 50263145988..256b122b635 100644
--- a/docs/snapshot/api/grails/plugin/json/view/JsonViewGrailsPlugin.html
+++ b/docs/snapshot/api/grails/plugin/json/view/JsonViewGrailsPlugin.html
@@ -299,7 +299,7 @@ extends <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../../grails/plugins/Plugin.html#getApplicationCon [...]
+                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()' [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/grails/plugin/markup/view/MarkupViewGrailsPlugin.html b/docs/snapshot/api/grails/plugin/markup/view/MarkupViewGrailsPlugin.html
index 9f0ad164181..5b0ad62a46f 100644
--- a/docs/snapshot/api/grails/plugin/markup/view/MarkupViewGrailsPlugin.html
+++ b/docs/snapshot/api/grails/plugin/markup/view/MarkupViewGrailsPlugin.html
@@ -301,7 +301,7 @@ extends <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../../grails/plugins/Plugin.html#getApplicationCon [...]
+                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()' [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/grails/plugin/scaffolding/ScaffoldingGrailsPlugin.html b/docs/snapshot/api/grails/plugin/scaffolding/ScaffoldingGrailsPlugin.html
index 7042da0a574..0c70b8f55f6 100644
--- a/docs/snapshot/api/grails/plugin/scaffolding/ScaffoldingGrailsPlugin.html
+++ b/docs/snapshot/api/grails/plugin/scaffolding/ScaffoldingGrailsPlugin.html
@@ -294,7 +294,7 @@ extends <a href='../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../grails/plugins/Plugin.html#getApplicationContext()'>getAppl [...]
+                            <td class="colLast"><code><a href='../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</ [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/grails/plugin/springsecurity/SpringSecurityCoreGrailsPlugin.html b/docs/snapshot/api/grails/plugin/springsecurity/SpringSecurityCoreGrailsPlugin.html
index 88a2d12d90d..570792d26a2 100644
--- a/docs/snapshot/api/grails/plugin/springsecurity/SpringSecurityCoreGrailsPlugin.html
+++ b/docs/snapshot/api/grails/plugin/springsecurity/SpringSecurityCoreGrailsPlugin.html
@@ -406,7 +406,7 @@ extends <a href='../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../grails/plugins/Plugin.html#getApplicationContext()'>getAppl [...]
+                            <td class="colLast"><code><a href='../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</ [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/grails/plugin/springsecurity/acl/SpringSecurityAclGrailsPlugin.html b/docs/snapshot/api/grails/plugin/springsecurity/acl/SpringSecurityAclGrailsPlugin.html
index 7f6ff1ded21..fad5a7962d6 100644
--- a/docs/snapshot/api/grails/plugin/springsecurity/acl/SpringSecurityAclGrailsPlugin.html
+++ b/docs/snapshot/api/grails/plugin/springsecurity/acl/SpringSecurityAclGrailsPlugin.html
@@ -382,7 +382,7 @@ extends <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../../grails/plugins/Plugin.html#getApplicationCon [...]
+                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()' [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/grails/plugin/springsecurity/cas/SpringSecurityCasGrailsPlugin.html b/docs/snapshot/api/grails/plugin/springsecurity/cas/SpringSecurityCasGrailsPlugin.html
index 32691b8f846..bb2011a51a1 100644
--- a/docs/snapshot/api/grails/plugin/springsecurity/cas/SpringSecurityCasGrailsPlugin.html
+++ b/docs/snapshot/api/grails/plugin/springsecurity/cas/SpringSecurityCasGrailsPlugin.html
@@ -300,7 +300,7 @@ extends <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../../grails/plugins/Plugin.html#getApplicationCon [...]
+                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()' [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/grails/plugin/springsecurity/ldap/SpringSecurityLdapGrailsPlugin.html b/docs/snapshot/api/grails/plugin/springsecurity/ldap/SpringSecurityLdapGrailsPlugin.html
index 74f11ef693a..4ea68a1bba0 100644
--- a/docs/snapshot/api/grails/plugin/springsecurity/ldap/SpringSecurityLdapGrailsPlugin.html
+++ b/docs/snapshot/api/grails/plugin/springsecurity/ldap/SpringSecurityLdapGrailsPlugin.html
@@ -295,7 +295,7 @@ extends <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../../grails/plugins/Plugin.html#getApplicationCon [...]
+                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()' [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/grails/plugin/springsecurity/oauth2/SpringSecurityOauth2GrailsPlugin.html b/docs/snapshot/api/grails/plugin/springsecurity/oauth2/SpringSecurityOauth2GrailsPlugin.html
index 0f4cfb1c451..a809d0b7c24 100644
--- a/docs/snapshot/api/grails/plugin/springsecurity/oauth2/SpringSecurityOauth2GrailsPlugin.html
+++ b/docs/snapshot/api/grails/plugin/springsecurity/oauth2/SpringSecurityOauth2GrailsPlugin.html
@@ -280,7 +280,7 @@ extends <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../../grails/plugins/Plugin.html#getApplicationCon [...]
+                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()' [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/grails/plugin/springsecurity/rest/SpringSecurityRestGormGrailsPlugin.html b/docs/snapshot/api/grails/plugin/springsecurity/rest/SpringSecurityRestGormGrailsPlugin.html
index b4a1c6d9fca..bf926e6d0a5 100644
--- a/docs/snapshot/api/grails/plugin/springsecurity/rest/SpringSecurityRestGormGrailsPlugin.html
+++ b/docs/snapshot/api/grails/plugin/springsecurity/rest/SpringSecurityRestGormGrailsPlugin.html
@@ -310,7 +310,7 @@ extends <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../../grails/plugins/Plugin.html#getApplicationCon [...]
+                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()' [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/grails/plugin/springsecurity/rest/SpringSecurityRestGrailsCacheGrailsPlugin.html b/docs/snapshot/api/grails/plugin/springsecurity/rest/SpringSecurityRestGrailsCacheGrailsPlugin.html
index b7e4067838b..9d5f0ff604b 100644
--- a/docs/snapshot/api/grails/plugin/springsecurity/rest/SpringSecurityRestGrailsCacheGrailsPlugin.html
+++ b/docs/snapshot/api/grails/plugin/springsecurity/rest/SpringSecurityRestGrailsCacheGrailsPlugin.html
@@ -310,7 +310,7 @@ extends <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../../grails/plugins/Plugin.html#getApplicationCon [...]
+                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()' [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/grails/plugin/springsecurity/rest/SpringSecurityRestGrailsPlugin.html b/docs/snapshot/api/grails/plugin/springsecurity/rest/SpringSecurityRestGrailsPlugin.html
index 8aea7f6a39e..85edda2d93f 100644
--- a/docs/snapshot/api/grails/plugin/springsecurity/rest/SpringSecurityRestGrailsPlugin.html
+++ b/docs/snapshot/api/grails/plugin/springsecurity/rest/SpringSecurityRestGrailsPlugin.html
@@ -322,7 +322,7 @@ extends <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../../grails/plugins/Plugin.html#getApplicationCon [...]
+                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()' [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/grails/plugin/springsecurity/rest/SpringSecurityRestMemcachedGrailsPlugin.html b/docs/snapshot/api/grails/plugin/springsecurity/rest/SpringSecurityRestMemcachedGrailsPlugin.html
index 08b79599b84..5e6829ce3a4 100644
--- a/docs/snapshot/api/grails/plugin/springsecurity/rest/SpringSecurityRestMemcachedGrailsPlugin.html
+++ b/docs/snapshot/api/grails/plugin/springsecurity/rest/SpringSecurityRestMemcachedGrailsPlugin.html
@@ -310,7 +310,7 @@ extends <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../../grails/plugins/Plugin.html#getApplicationCon [...]
+                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()' [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/grails/plugin/springsecurity/rest/SpringSecurityRestRedisGrailsPlugin.html b/docs/snapshot/api/grails/plugin/springsecurity/rest/SpringSecurityRestRedisGrailsPlugin.html
index 04991383596..4d88bdf7052 100644
--- a/docs/snapshot/api/grails/plugin/springsecurity/rest/SpringSecurityRestRedisGrailsPlugin.html
+++ b/docs/snapshot/api/grails/plugin/springsecurity/rest/SpringSecurityRestRedisGrailsPlugin.html
@@ -310,7 +310,7 @@ extends <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../../grails/plugins/Plugin.html#getApplicationCon [...]
+                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()' [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/grails/plugin/springsecurity/ui/SpringSecurityUiGrailsPlugin.html b/docs/snapshot/api/grails/plugin/springsecurity/ui/SpringSecurityUiGrailsPlugin.html
index 91268c89603..1342565dd62 100644
--- a/docs/snapshot/api/grails/plugin/springsecurity/ui/SpringSecurityUiGrailsPlugin.html
+++ b/docs/snapshot/api/grails/plugin/springsecurity/ui/SpringSecurityUiGrailsPlugin.html
@@ -308,7 +308,7 @@ extends <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../../grails/plugins/Plugin.html#getApplicationCon [...]
+                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()' [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/grails/plugins/GrailsPlugin.html b/docs/snapshot/api/grails/plugins/GrailsPlugin.html
index ef22ec28a94..697ffe7b309 100644
--- a/docs/snapshot/api/grails/plugins/GrailsPlugin.html
+++ b/docs/snapshot/api/grails/plugins/GrailsPlugin.html
@@ -191,193 +191,200 @@ extends <a href='../../org.springframework.context.ApplicationContextAware.html'
                         </tr>
                         
                         <tr class="rowColor">
+                            <td class="colFirst"><code></code></td>
+                            <td class="colLast"><code>public&nbsp;<a href='../../org.springframework.beans.factory.BeanRegistrar.html'>BeanRegistrar</a></code></td>
+                            <td class="colLast"><code><strong><a href="#getBeanRegistrar()">getBeanRegistrar</a></strong>()</code><br>Returns the BeanRegistrar exposed by this plugin's
+ <a href='../../grails/core/GrailsApplicationLifeCycle.html#beanRegistrar()' title='GrailsApplicationLifeCycle.beanRegistrar'>GrailsApplicationLifeCycle.beanRegistrar</a> hook, if any. </td>
+                        </tr>
+                        
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;java.lang.String[]</code></td>
                             <td class="colLast"><code><strong><a href="#getDependencyNames()">getDependencyNames</a></strong>()</code><br> <DL><DT><B>Returns:</B></DT><DD>The names of the plugins this plugin depends on</DD></DL></td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;java.lang.String</code></td>
                             <td class="colLast"><code><strong><a href="#getDependentVersion(java.lang.String)">getDependentVersion</a></strong>(java.lang.String name)</code><br>The version of the specified dependency</td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;java.lang.String[]</code></td>
                             <td class="colLast"><code><strong><a href="#getEvictionNames()">getEvictionNames</a></strong>()</code><br> <DL><DT><B>Returns:</B></DT><DD>The names of the plugins this plugin should evict onload</DD></DL></td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;java.lang.String</code></td>
                             <td class="colLast"><code><strong><a href="#getFileSystemName()">getFileSystemName</a></strong>()</code><br>Returns the name of the plugin as represented in the file system, including the version.
  </td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;java.lang.String</code></td>
                             <td class="colLast"><code><strong><a href="#getFileSystemShortName()">getFileSystemShortName</a></strong>()</code><br>Returns the name of the plugin as represented on the file system without the version.
  </td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;groovy.lang.GroovyObject</code></td>
                             <td class="colLast"><code><strong><a href="#getInstance()">getInstance</a></strong>()</code><br>Retrieves the wrapped plugin instance for this plugin</td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;java.lang.String[]</code></td>
                             <td class="colLast"><code><strong><a href="#getLoadAfterNames()">getLoadAfterNames</a></strong>()</code><br>Retrieves the names of plugins that this plugin should be loaded after. </td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;java.lang.String[]</code></td>
                             <td class="colLast"><code><strong><a href="#getLoadBeforeNames()">getLoadBeforeNames</a></strong>()</code><br>Retrieves the names of plugins that this plugin should be loaded before.
  </td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;<a href='../../grails/plugins/GrailsPluginManager.html'>GrailsPluginManager</a></code></td>
                             <td class="colLast"><code><strong><a href="#getManager()">getManager</a></strong>()</code><br>Retrieves the plugin manager if known, otherwise returns null</td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;java.lang.String[]</code></td>
                             <td class="colLast"><code><strong><a href="#getObservedPluginNames()">getObservedPluginNames</a></strong>()</code><br>Retrieve the plugin names that this plugin is observing for changes</td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;java.lang.Class&lt;?&gt;</code></td>
                             <td class="colLast"><code><strong><a href="#getPluginClass()">getPluginClass</a></strong>()</code><br>Returns the underlying class that represents this plugin</td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;java.util.List&lt;java.lang.String&gt;</code></td>
                             <td class="colLast"><code><strong><a href="#getPluginExcludes()">getPluginExcludes</a></strong>()</code><br>A list of resources that the plugin should exclude from the packaged distribution</td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;java.lang.String</code></td>
                             <td class="colLast"><code><strong><a href="#getPluginPath()">getPluginPath</a></strong>()</code><br>Returns the path of the plug-in</td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;java.lang.String</code></td>
                             <td class="colLast"><code><strong><a href="#getPluginPathCamelCase()">getPluginPathCamelCase</a></strong>()</code><br>Returns the path of the plug-in using camel case</td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;PropertySource&lt;?&gt;</code></td>
                             <td class="colLast"><code><strong><a href="#getPropertySource()">getPropertySource</a></strong>()</code><br>Returns the plugin's configuration as a PropertySource, looked up from the
  Spring org.springframework.core.env.Environment by naming convention.</td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;java.lang.Class&lt;?&gt;[]</code></td>
                             <td class="colLast"><code><strong><a href="#getProvidedArtefacts()">getProvidedArtefacts</a></strong>()</code><br>Retrieves an array of provided Artefacts that are pre-compiled additions to the GrailsApplication object
  but are overridable by the end-user</td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;java.util.Collection&lt;? extends TypeFilter&gt;</code></td>
                             <td class="colLast"><code><strong><a href="#getTypeFilters()">getTypeFilters</a></strong>()</code><br>Plugin can provide a list of Spring TypeFilters so that annotated components can
  be scanned into the ApplicationContext</td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;java.util.List&lt;WatchPattern&gt;</code></td>
                             <td class="colLast"><code><strong><a href="#getWatchedResourcePatterns()">getWatchedResourcePatterns</a></strong>()</code><br>Resources that this plugin watches</td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;boolean</code></td>
                             <td class="colLast"><code><strong><a href="#hasInterestInChange(java.lang.String)">hasInterestInChange</a></strong>(java.lang.String path)</code><br>Whether the plugin is interested in a particular change</td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;boolean</code></td>
                             <td class="colLast"><code><strong><a href="#isBasePlugin()">isBasePlugin</a></strong>()</code><br>Returns whether this plugin is loaded from the current plugin.
  </td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;boolean</code></td>
                             <td class="colLast"><code><strong><a href="#isEnabled()">isEnabled</a></strong>()</code><br> <DL><DT><B>Returns:</B></DT><DD>Whether the plugin is enabled or not</DD></DL></td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;boolean</code></td>
                             <td class="colLast"><code><strong><a href="#isEnabled(java.lang.String)">isEnabled</a></strong>(java.lang.String[] activeProfiles)</code><br>Check whether the plugin is enabled for the given profile</td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;void</code></td>
                             <td class="colLast"><code><strong><a href="#notifyOfEvent(java.util.Map)">notifyOfEvent</a></strong>(java.util.Map event)</code><br>Notifies this plugin of the specified Event calling the onChange listener</td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;java.util.Map</code></td>
                             <td class="colLast"><code><strong><a href="#notifyOfEvent(int, java.lang.Object)">notifyOfEvent</a></strong>(int eventKind, java.lang.Object source)</code><br>Notifies the plugin of a specific event for the given event id, which is one of ON_CHANGE, ON_CONFIG_CHANGE</td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;void</code></td>
                             <td class="colLast"><code><strong><a href="#refresh()">refresh</a></strong>()</code><br>Refreshes this Grails plugin reloading any watched resources as necessary</td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;void</code></td>
                             <td class="colLast"><code><strong><a href="#setApplication(grails.core.GrailsApplication)">setApplication</a></strong>(<a href='../../grails/core/GrailsApplication.html'>GrailsApplication</a> application)</code><br></td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;void</code></td>
                             <td class="colLast"><code><strong><a href="#setBasePlugin(boolean)">setBasePlugin</a></strong>(boolean isBase)</code><br>Sets whether this plugin is the base plugin</td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;void</code></td>
                             <td class="colLast"><code><strong><a href="#setDescriptor(org.springframework.core.io.Resource)">setDescriptor</a></strong>(<a href='../../org.springframework.core.io.Resource.html'>Resource</a> descriptor)</code><br>Sets the plugin descriptor for this plugin</td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;void</code></td>
                             <td class="colLast"><code><strong><a href="#setManager(grails.plugins.GrailsPluginManager)">setManager</a></strong>(<a href='../../grails/plugins/GrailsPluginManager.html'>GrailsPluginManager</a> manager)</code><br>Sets the plugin manager for this plugin</td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;boolean</code></td>
                             <td class="colLast"><code><strong><a href="#supportsCurrentScopeAndEnvironment()">supportsCurrentScopeAndEnvironment</a></strong>()</code><br> <DL><DT><B>Returns:</B></DT><DD>true if the current plugin supports the current BuildScope and Environment</DD></DL></td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;boolean</code></td>
                             <td class="colLast"><code><strong><a href="#supportsEnvironment(grails.util.Environment)">supportsEnvironment</a></strong>(<a href='../../grails/util/Environment.html'>Environment</a> environment)</code><br>Returns whether this plugin supports the given environment name</td>
@@ -485,6 +492,19 @@ extends <a href='../../org.springframework.context.ApplicationContextAware.html'
                             </li>
                         </ul>
                     
+                        <a name="getBeanRegistrar()"><!-- --></a>
+                        <ul class="blockListLast">
+                            <li class="blockList">
+                                <h4>public&nbsp;<a href='../../org.springframework.beans.factory.BeanRegistrar.html'>BeanRegistrar</a> <strong>getBeanRegistrar</strong>()</h4>
+                                <p> Returns the BeanRegistrar exposed by this plugin's
+ <a href='../../grails/core/GrailsApplicationLifeCycle.html#beanRegistrar()' title='GrailsApplicationLifeCycle.beanRegistrar'>GrailsApplicationLifeCycle.beanRegistrar</a> hook, if any. The registrar
+ is applied to the bean definition registry before Spring Boot auto-configuration is
+ processed, so its beans take precedence over Boot's <CODE>@ConditionalOnMissingBean</CODE>
+ defaults.
+      <DL><DT><B>Returns:</B></DT><DD>The plugin's BeanRegistrar, or <CODE>null</CODE> if the plugin does not define one</DD></DL><DL><DT><B>Since:</B></DT><DD>8.0</DD></DL></p>
+                            </li>
+                        </ul>
+                    
                         <a name="getDependencyNames()"><!-- --></a>
                         <ul class="blockListLast">
                             <li class="blockList">
diff --git a/docs/snapshot/api/grails/plugins/Plugin.html b/docs/snapshot/api/grails/plugins/Plugin.html
index 1f96786f20e..1911f9efe37 100644
--- a/docs/snapshot/api/grails/plugins/Plugin.html
+++ b/docs/snapshot/api/grails/plugins/Plugin.html
@@ -245,29 +245,43 @@ implements <a href='../../org.springframework.context.ApplicationContextAware.ht
                         </tr>
                         
                         <tr class="altColor">
+                            <td class="colFirst"><code></code></td>
+                            <td class="colLast"><code><a href='../../org.springframework.beans.factory.BeanRegistrar.html'>BeanRegistrar</a></code></td>
+                            <td class="colLast"><code><strong><a href="#beanRegistrar()">beanRegistrar</a></strong>()</code><br>Sub classes should override to register beans with the Spring Framework
+ org.springframework.beans.factory.BeanRegistry using a
+ org.springframework.beans.factory.BeanRegistrar. </td>
+                        </tr>
+                        
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>void</code></td>
                             <td class="colLast"><code><strong><a href="#beans(groovy.lang.Closure)">beans</a></strong>(groovy.lang.Closure beanDefinitions)</code><br>Allows a plugin to define beans at runtime. </td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>void</code></td>
                             <td class="colLast"><code><strong><a href="#doWithApplicationContext()">doWithApplicationContext</a></strong>()</code><br>Invokes once the ApplicationContext has been refreshed and after {#doWithDynamicMethods()} is invoked. </td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>void</code></td>
                             <td class="colLast"><code><strong><a href="#doWithDynamicMethods()">doWithDynamicMethods</a></strong>()</code><br>Invoked in a phase where plugins can add dynamic methods. </td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>groovy.lang.Closure</code></td>
                             <td class="colLast"><code><strong><a href="#doWithSpring()">doWithSpring</a></strong>()</code><br>Sub classes should override to provide implementations</td>
                         </tr>
                         
+                        <tr class="rowColor">
+                            <td class="colFirst"><code></code></td>
+                            <td class="colLast"><code>void</code></td>
+                            <td class="colLast"><code><strong><a href="#doWithSpring(grails.spring.BeanBuilder)">doWithSpring</a></strong>(<a href='../../grails/spring/BeanBuilder.html'>BeanBuilder</a> beans)</code><br>Registers Spring beans directly against the supplied BeanBuilder. </td>
+                        </tr>
+                        
                         <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code><a href='../../org.springframework.context.ConfigurableApplicationContext.html'>ConfigurableApplicationContext</a></code></td>
@@ -460,6 +474,21 @@ implements <a href='../../org.springframework.context.ApplicationContextAware.ht
                 </a>
                     <h3>Method Detail</h3>
                     
+                        <a name="beanRegistrar()"><!-- --></a>
+                        <ul class="blockListLast">
+                            <li class="blockList">
+                                <h4>@java.lang.Override<br><a href='../../org.springframework.beans.factory.BeanRegistrar.html'>BeanRegistrar</a> <strong>beanRegistrar</strong>()</h4>
+                                <p> Sub classes should override to register beans with the Spring Framework
+ org.springframework.beans.factory.BeanRegistry using a
+ org.springframework.beans.factory.BeanRegistrar. This is the modern, Spring-native
+ replacement for the <a href='#doWithSpring()'>doWithSpring()</a> bean builder DSL.
+
+ <p>The returned registrar is applied before Spring Boot auto-configuration is processed, so
+ beans registered here take precedence over Boot's <CODE>@ConditionalOnMissingBean</CODE> defaults.</p> <DL><DT><B>Returns:</B></DT><DD>A org.springframework.beans.factory.BeanRegistrar that registers beans,
+ or <CODE>null</CODE> if none (the default)</DD></DL><DL><DT><B>Since:</B></DT><DD>8.0</DD></DL></p>
+                            </li>
+                        </ul>
+                    
                         <a name="beans(groovy.lang.Closure)"><!-- --></a>
                         <ul class="blockListLast">
                             <li class="blockList">
@@ -487,8 +516,23 @@ implements <a href='../../org.springframework.context.ApplicationContextAware.ht
                         <a name="doWithSpring()"><!-- --></a>
                         <ul class="blockListLast">
                             <li class="blockList">
-                                <h4>@java.lang.Override<br>groovy.lang.Closure <strong>doWithSpring</strong>()</h4>
-                                <p> Sub classes should override to provide implementations <DL><DT><B>Returns:</B></DT><DD>A closure that defines beans to be executed by Spring</DD></DL></p>
+                                <h4>@java.lang.Deprecated(since: 8.0)<br>@java.lang.Override<br>groovy.lang.Closure <strong>doWithSpring</strong>()</h4>
+                                <p> Sub classes should override to provide implementations<DL><DT><B>deprecated:</B></DT><DD>since 8.0 in favour of <a href='#beanRegistrar()'>beanRegistrar()</a>. The underlying bean builder DSL
+ remains available but is no longer actively supported and will not receive fixes for new
+ issues — you are strongly urged to migrate to <a href='#beanRegistrar()'>beanRegistrar()</a>.</DD></DL> <DL><DT><B>Returns:</B></DT><DD>A closure that defines beans to be executed by Spring</DD></DL></p>
+                            </li>
+                        </ul>
+                    
+                        <a name="doWithSpring(grails.spring.BeanBuilder)"><!-- --></a>
+                        <ul class="blockListLast">
+                            <li class="blockList">
+                                <h4>void <strong>doWithSpring</strong>(<a href='../../grails/spring/BeanBuilder.html'>BeanBuilder</a> beans)</h4>
+                                <p> Registers Spring beans directly against the supplied BeanBuilder. This is the statically-compilable
+ alternative to <a href='#doWithSpring()'>doWithSpring()</a>: instead of returning a closure whose delegate the container wires up,
+ an implementation registers beans against the builder passed as an argument. Subclasses should override.
+
+ A plugin should override either this method or <a href='#doWithSpring()'>doWithSpring()</a>, but not both: the two forms are
+ alternatives, and defining both causes the plugin to fail to load. <DL><DT><B>Parameters:</B></DT><DD><code>beans</code> -  The BeanBuilder to register beans against</DD></DL></p>
                             </li>
                         </ul>
                     
diff --git a/docs/snapshot/api/grails/plugins/mail/MailGrailsPlugin.html b/docs/snapshot/api/grails/plugins/mail/MailGrailsPlugin.html
index 37954d40179..54542070c10 100644
--- a/docs/snapshot/api/grails/plugins/mail/MailGrailsPlugin.html
+++ b/docs/snapshot/api/grails/plugins/mail/MailGrailsPlugin.html
@@ -278,7 +278,7 @@ extends <a href='../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../grails/plugins/Plugin.html#getApplicationContext()'>getAppl [...]
+                            <td class="colLast"><code><a href='../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</ [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/grails/plugins/mongodb/MongodbGrailsPlugin.html b/docs/snapshot/api/grails/plugins/mongodb/MongodbGrailsPlugin.html
index 0643e682d6c..a6f5ef871ab 100644
--- a/docs/snapshot/api/grails/plugins/mongodb/MongodbGrailsPlugin.html
+++ b/docs/snapshot/api/grails/plugins/mongodb/MongodbGrailsPlugin.html
@@ -301,7 +301,7 @@ extends <a href='../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../grails/plugins/Plugin.html#getApplicationContext()'>getAppl [...]
+                            <td class="colLast"><code><a href='../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</ [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/grails/ui/command/GrailsApplicationContextCommandRunner.html b/docs/snapshot/api/grails/ui/command/GrailsApplicationContextCommandRunner.html
index 8298ec47dae..e88df5cf252 100644
--- a/docs/snapshot/api/grails/ui/command/GrailsApplicationContextCommandRunner.html
+++ b/docs/snapshot/api/grails/ui/command/GrailsApplicationContextCommandRunner.html
@@ -244,7 +244,7 @@ extends <a href='../../../grails/ui/support/DevelopmentGrailsApplication.html'>D
                         </tr>
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../grails/boot/GrailsApp.html'>GrailsApp</a></code></td>
-                            <td class="colLast"><code><a href='../../../grails/boot/GrailsApp.html#compileGroovyFile(org.codehaus.groovy.control.CompilerConfiguration, java.io.File)'>compileGroovyFile</a>, <a href='../../../grails/boot/GrailsApp.html#configureCliPidFileWriter()'>configureCliPidFileWriter</a>, <a href='../../../grails/boot/GrailsApp.html#configureDirectoryWatcher(org.grails.io.watch.DirectoryWatcher, java.lang.String)'>configureDirectoryWatcher</a>, <a href='../../../grai [...]
+                            <td class="colLast"><code><a href='../../../grails/boot/GrailsApp.html#compileGroovyFile(org.codehaus.groovy.control.CompilerConfiguration, java.io.File)'>compileGroovyFile</a>, <a href='../../../grails/boot/GrailsApp.html#configureCliPidFileWriter()'>configureCliPidFileWriter</a>, <a href='../../../grails/boot/GrailsApp.html#configureDirectoryWatcher(org.grails.io.watch.DirectoryWatcher, java.lang.String)'>configureDirectoryWatcher</a>, <a href='../../../grai [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/grails/ui/console/GrailsSwingConsole.html b/docs/snapshot/api/grails/ui/console/GrailsSwingConsole.html
index 7046a66b452..6b276fca8c9 100644
--- a/docs/snapshot/api/grails/ui/console/GrailsSwingConsole.html
+++ b/docs/snapshot/api/grails/ui/console/GrailsSwingConsole.html
@@ -233,7 +233,7 @@ extends <a href='../../../grails/boot/GrailsApp.html'>GrailsApp</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../grails/boot/GrailsApp.html'>GrailsApp</a></code></td>
-                            <td class="colLast"><code><a href='../../../grails/boot/GrailsApp.html#compileGroovyFile(org.codehaus.groovy.control.CompilerConfiguration, java.io.File)'>compileGroovyFile</a>, <a href='../../../grails/boot/GrailsApp.html#configureCliPidFileWriter()'>configureCliPidFileWriter</a>, <a href='../../../grails/boot/GrailsApp.html#configureDirectoryWatcher(org.grails.io.watch.DirectoryWatcher, java.lang.String)'>configureDirectoryWatcher</a>, <a href='../../../grai [...]
+                            <td class="colLast"><code><a href='../../../grails/boot/GrailsApp.html#compileGroovyFile(org.codehaus.groovy.control.CompilerConfiguration, java.io.File)'>compileGroovyFile</a>, <a href='../../../grails/boot/GrailsApp.html#configureCliPidFileWriter()'>configureCliPidFileWriter</a>, <a href='../../../grails/boot/GrailsApp.html#configureDirectoryWatcher(org.grails.io.watch.DirectoryWatcher, java.lang.String)'>configureDirectoryWatcher</a>, <a href='../../../grai [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/grails/ui/script/GrailsApplicationScriptRunner.html b/docs/snapshot/api/grails/ui/script/GrailsApplicationScriptRunner.html
index 9945afc3002..dc42e3e64ea 100644
--- a/docs/snapshot/api/grails/ui/script/GrailsApplicationScriptRunner.html
+++ b/docs/snapshot/api/grails/ui/script/GrailsApplicationScriptRunner.html
@@ -216,7 +216,7 @@ extends <a href='../../../grails/ui/support/DevelopmentGrailsApplication.html'>D
                         </tr>
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../grails/boot/GrailsApp.html'>GrailsApp</a></code></td>
-                            <td class="colLast"><code><a href='../../../grails/boot/GrailsApp.html#compileGroovyFile(org.codehaus.groovy.control.CompilerConfiguration, java.io.File)'>compileGroovyFile</a>, <a href='../../../grails/boot/GrailsApp.html#configureCliPidFileWriter()'>configureCliPidFileWriter</a>, <a href='../../../grails/boot/GrailsApp.html#configureDirectoryWatcher(org.grails.io.watch.DirectoryWatcher, java.lang.String)'>configureDirectoryWatcher</a>, <a href='../../../grai [...]
+                            <td class="colLast"><code><a href='../../../grails/boot/GrailsApp.html#compileGroovyFile(org.codehaus.groovy.control.CompilerConfiguration, java.io.File)'>compileGroovyFile</a>, <a href='../../../grails/boot/GrailsApp.html#configureCliPidFileWriter()'>configureCliPidFileWriter</a>, <a href='../../../grails/boot/GrailsApp.html#configureDirectoryWatcher(org.grails.io.watch.DirectoryWatcher, java.lang.String)'>configureDirectoryWatcher</a>, <a href='../../../grai [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/grails/ui/shell/GrailsShell.html b/docs/snapshot/api/grails/ui/shell/GrailsShell.html
index 195128a096b..0676bd39787 100644
--- a/docs/snapshot/api/grails/ui/shell/GrailsShell.html
+++ b/docs/snapshot/api/grails/ui/shell/GrailsShell.html
@@ -234,7 +234,7 @@ extends <a href='../../../grails/boot/GrailsApp.html'>GrailsApp</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../grails/boot/GrailsApp.html'>GrailsApp</a></code></td>
-                            <td class="colLast"><code><a href='../../../grails/boot/GrailsApp.html#compileGroovyFile(org.codehaus.groovy.control.CompilerConfiguration, java.io.File)'>compileGroovyFile</a>, <a href='../../../grails/boot/GrailsApp.html#configureCliPidFileWriter()'>configureCliPidFileWriter</a>, <a href='../../../grails/boot/GrailsApp.html#configureDirectoryWatcher(org.grails.io.watch.DirectoryWatcher, java.lang.String)'>configureDirectoryWatcher</a>, <a href='../../../grai [...]
+                            <td class="colLast"><code><a href='../../../grails/boot/GrailsApp.html#compileGroovyFile(org.codehaus.groovy.control.CompilerConfiguration, java.io.File)'>compileGroovyFile</a>, <a href='../../../grails/boot/GrailsApp.html#configureCliPidFileWriter()'>configureCliPidFileWriter</a>, <a href='../../../grails/boot/GrailsApp.html#configureDirectoryWatcher(org.grails.io.watch.DirectoryWatcher, java.lang.String)'>configureDirectoryWatcher</a>, <a href='../../../grai [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/grails/ui/support/DevelopmentGrailsApplication.html b/docs/snapshot/api/grails/ui/support/DevelopmentGrailsApplication.html
index 4732e6808fa..197c3df6e83 100644
--- a/docs/snapshot/api/grails/ui/support/DevelopmentGrailsApplication.html
+++ b/docs/snapshot/api/grails/ui/support/DevelopmentGrailsApplication.html
@@ -208,7 +208,7 @@ extends <a href='../../../grails/boot/GrailsApp.html'>GrailsApp</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../grails/boot/GrailsApp.html'>GrailsApp</a></code></td>
-                            <td class="colLast"><code><a href='../../../grails/boot/GrailsApp.html#compileGroovyFile(org.codehaus.groovy.control.CompilerConfiguration, java.io.File)'>compileGroovyFile</a>, <a href='../../../grails/boot/GrailsApp.html#configureCliPidFileWriter()'>configureCliPidFileWriter</a>, <a href='../../../grails/boot/GrailsApp.html#configureDirectoryWatcher(org.grails.io.watch.DirectoryWatcher, java.lang.String)'>configureDirectoryWatcher</a>, <a href='../../../grai [...]
+                            <td class="colLast"><code><a href='../../../grails/boot/GrailsApp.html#compileGroovyFile(org.codehaus.groovy.control.CompilerConfiguration, java.io.File)'>compileGroovyFile</a>, <a href='../../../grails/boot/GrailsApp.html#configureCliPidFileWriter()'>configureCliPidFileWriter</a>, <a href='../../../grails/boot/GrailsApp.html#configureDirectoryWatcher(org.grails.io.watch.DirectoryWatcher, java.lang.String)'>configureDirectoryWatcher</a>, <a href='../../../grai [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/index-all.html b/docs/snapshot/api/index-all.html
index 53a18509990..49228d0ee82 100644
--- a/docs/snapshot/api/index-all.html
+++ b/docs/snapshot/api/index-all.html
@@ -2070,6 +2070,9 @@ if (location.href.indexOf('is-external=true') == -1) {
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="grails/plugin/springsecurity/ReflectionUtils.html#application" title="Property in ReflectionUtils">application</a></span> - Property in <a href="grails/plugin/springsecurity/ReflectionUtils.html">ReflectionUtils</a>
 </dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="grails/boot/config/GrailsEarlyPluginRegistrationPostProcessor.html#APPLICATION_SOURCE_CLASSES_BEAN_NAME" title="Field in GrailsEarlyPluginRegistrationPostProcessor">APPLICATION_SOURCE_CLASSES_BEAN_NAME</a></span> - Field in <a href="grails/boot/config/GrailsEarlyPluginRegistrationPostProcessor.html">GrailsEarlyPluginRegistrationPostProcessor</a>
+</dt><dd> <div class="block">Name of the <CODE>Class[]</CODE> singleton under which <a href='../../../grails/boot/GrailsApp.html' title='GrailsApp'>GrailsApp</a> stashes the
+ application source classes so this phase can perform early artefact discovery.</div></dd>
 <dt><span class="strong"><a href="grails/util/Metadata.html#APPLICATION_VERSION" title="Field in Metadata">APPLICATION_VERSION</a></span> - Field in <a href="grails/util/Metadata.html">Metadata</a>
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="org/grails/plugins/web/controllers/metaclass/RenderDynamicMethod.html#APPLICATION_XML" title="Field in RenderDynamicMethod">APPLICATION_XML</a></span> - Field in <a href="org/grails/plugins/web/controllers/metaclass/RenderDynamicMethod.html">RenderDynamicMethod</a>
@@ -2082,6 +2085,9 @@ if (location.href.indexOf('is-external=true') == -1) {
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="org/grails/compiler/injection/ApplicationClassInjector.html#applicationArtefactHandler" title="Property in ApplicationClassInjector">applicationArtefactHandler</a></span> - Property in <a href="org/grails/compiler/injection/ApplicationClassInjector.html">ApplicationClassInjector</a>
 </dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="grails/boot/config/ApplicationArtefactScanner.html" title="Class in grails.boot.config">ApplicationArtefactScanner</a></span> - Class in <a href="./grails/boot/config/package-summary.html">grails.boot.config</a>
+</dt><dd><div class="block">Discovers the artefact classes that make up a Grails application by scanning the classpath relative
+ to an application class. </div></dd>
 <dt><span class="strong"><a href="grails/core/ApplicationAttributes.html" title="Interface in grails.core">ApplicationAttributes</a></span> - Interface in <a href="./grails/core/package-summary.html">grails.core</a>
 </dt><dd><div class="block"> <DL><DT><B>Authors:</B></DT><DD>Graeme Rocher</DD></DL></div></dd>
 <dt><span class="strong"><a href="grails/core/DefaultGrailsApplication.html#applicationClass" title="Field in DefaultGrailsApplication">applicationClass</a></span> - Field in <a href="grails/core/DefaultGrailsApplication.html">DefaultGrailsApplication</a>
@@ -3608,6 +3614,14 @@ if (location.href.indexOf('is-external=true') == -1) {
 </dt><dd><div class="block"></div></dd>
 <dt><span class="strong"><a href="grails/plugin/formfields/BeanPropertyAccessorImpl.html#BeanPropertyAccessorImpl()" title="Constructor in BeanPropertyAccessorImpl">BeanPropertyAccessorImpl()</a></span> - Constructor in <a href="grails/plugin/formfields/BeanPropertyAccessorImpl.html">BeanPropertyAccessorImpl</a>
 </dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="grails/core/GrailsApplicationLifeCycle.html#beanRegistrar()" title="Method in GrailsApplicationLifeCycle">beanRegistrar()</a></span> - Method in <a href="grails/core/GrailsApplicationLifeCycle.html">GrailsApplicationLifeCycle</a>
+</dt><dd> <div class="block">Sub classes should override to register beans with the Spring Framework
+ org.springframework.beans.factory.BeanRegistry using a BeanRegistrar.
+ </div></dd>
+<dt><span class="strong"><a href="grails/plugins/Plugin.html#beanRegistrar()" title="Method in Plugin">beanRegistrar()</a></span> - Method in <a href="grails/plugins/Plugin.html">Plugin</a>
+</dt><dd> <div class="block">Sub classes should override to register beans with the Spring Framework
+ org.springframework.beans.factory.BeanRegistry using a
+ org.springframework.beans.factory.BeanRegistrar. </div></dd>
 <dt><span class="strong"><a href="grails/spring/BeanBuilder.html#beans(Closure<?>)" title="Method in BeanBuilder">beans(Closure&lt;?&gt;)</a></span> - Method in <a href="grails/spring/BeanBuilder.html">BeanBuilder</a>
 </dt><dd> <div class="block">Defines a set of beans for the given block or closure.</div></dd>
 <dt><span class="strong"><a href="org/grails/plugins/DefaultGrailsPlugin.html#beans(groovy.lang.Closure)" title="Method in DefaultGrailsPlugin">beans(groovy.lang.Closure)</a></span> - Method in <a href="org/grails/plugins/DefaultGrailsPlugin.html">DefaultGrailsPlugin</a>
@@ -13368,8 +13382,8 @@ if (location.href.indexOf('is-external=true') == -1) {
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="grails/plugins/mongodb/MongodbGrailsPlugin.html#doWithSpring()" title="Method in MongodbGrailsPlugin">doWithSpring()</a></span> - Method in <a href="grails/plugins/mongodb/MongodbGrailsPlugin.html">MongodbGrailsPlugin</a>
 </dt><dd> <div class="block"></div></dd>
-<dt><span class="strong"><a href="grails/plugins/Plugin.html#doWithSpring()" title="Method in Plugin">doWithSpring()</a></span> - Method in <a href="grails/plugins/Plugin.html">Plugin</a>
-</dt><dd> <div class="block">Sub classes should override to provide implementations</div></dd>
+<dt><span class="strong"><a href="grails/plugins/Plugin.html#doWithSpring(grails.spring.BeanBuilder)" title="Method in Plugin">doWithSpring(grails.spring.BeanBuilder)</a></span> - Method in <a href="grails/plugins/Plugin.html">Plugin</a>
+</dt><dd> <div class="block">Registers Spring beans directly against the supplied BeanBuilder. </div></dd>
 <dt><span class="strong"><a href="redis/RedisGrailsPlugin.html#doWithSpring()" title="Method in RedisGrailsPlugin">doWithSpring()</a></span> - Method in <a href="redis/RedisGrailsPlugin.html">RedisGrailsPlugin</a>
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="org/grails/plugins/web/rest/plugin/RestResponderGrailsPlugin.html#doWithSpring()" title="Method in RestResponderGrailsPlugin">doWithSpring()</a></span> - Method in <a href="org/grails/plugins/web/rest/plugin/RestResponderGrailsPlugin.html">RestResponderGrailsPlugin</a>
@@ -13571,6 +13585,12 @@ if (location.href.indexOf('is-external=true') == -1) {
 </dt><dd><div class="block"></div></dd>
 <dt><span class="strong"><a href="org/apache/grails/data/testing/tck/domains/EagerOwner.html#EagerOwner()" title="Constructor in EagerOwner">EagerOwner()</a></span> - Constructor in <a href="org/apache/grails/data/testing/tck/domains/EagerOwner.html">EagerOwner</a>
 </dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="grails/boot/config/GrailsEarlyPluginRegistrationPostProcessor.html#EARLY_REGISTRATION_COMPLETE_BEAN_NAME" title="Field in GrailsEarlyPluginRegistrationPostProcessor">EARLY_REGISTRATION_COMPLETE_BEAN_NAME</a></span> - Field in <a href="grails/boot/config/GrailsEarlyPluginRegistrationPostProcessor.html">GrailsEarlyPluginRegistrationPostProcessor</a>
+</dt><dd> <div class="block">Name of the marker singleton registered once this phase has completed, checked by
+ <a href='../../../grails/boot/config/GrailsApplicationPostProcessor.html' title='GrailsApplicationPostProcessor'>GrailsApplicationPostProcessor</a> to reuse the promoted singletons and skip the
+ already-performed lifecycle steps. </div></dd>
+<dt><span class="strong"><a href="grails/boot/config/GrailsApplicationPostProcessor.html#earlyPluginRegistrationRan" title="Field in GrailsApplicationPostProcessor">earlyPluginRegistrationRan</a></span> - Field in <a href="grails/boot/config/GrailsApplicationPostProcessor.html">GrailsApplicationPostProcessor</a>
+</dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="org/grails/test/io/SystemOutAndErrSwapper.html#echoErr" title="Property in SystemOutAndErrSwapper">echoErr</a></span> - Property in <a href="org/grails/test/io/SystemOutAndErrSwapper.html">SystemOutAndErrSwapper</a>
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="org/grails/test/io/SystemOutAndErrSwapper.html#echoOut" title="Property in SystemOutAndErrSwapper">echoOut</a></span> - Property in <a href="org/grails/test/io/SystemOutAndErrSwapper.html">SystemOutAndErrSwapper</a>
@@ -18121,6 +18141,11 @@ if (location.href.indexOf('is-external=true') == -1) {
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="org/grails/transaction/ChainedTransactionManagerPostProcessor.html#getBeanNameWhitelistPattern()" title="Method in ChainedTransactionManagerPostProcessor">getBeanNameWhitelistPattern()</a></span> - Method in <a href="org/grails/transaction/ChainedTransactionManagerPostProcessor.html">ChainedTransactionManagerPostProcessor</a>
 </dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="org/grails/plugins/DefaultGrailsPlugin.html#getBeanRegistrar()" title="Method in DefaultGrailsPlugin">getBeanRegistrar()</a></span> - Method in <a href="org/grails/plugins/DefaultGrailsPlugin.html">DefaultGrailsPlugin</a>
+</dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="grails/plugins/GrailsPlugin.html#getBeanRegistrar()" title="Method in GrailsPlugin">getBeanRegistrar()</a></span> - Method in <a href="grails/plugins/GrailsPlugin.html">GrailsPlugin</a>
+</dt><dd> <div class="block">Returns the BeanRegistrar exposed by this plugin's
+ <a href='../../grails/core/GrailsApplicationLifeCycle.html#beanRegistrar()' title='GrailsApplicationLifeCycle.beanRegistrar'>GrailsApplicationLifeCycle.beanRegistrar</a> hook, if any. </div></dd>
 <dt><span class="strong"><a href="org/grails/spring/context/support/MapBasedSmartPropertyOverrideConfigurer.html#getBeansConfig()" title="Method in MapBasedSmartPropertyOverrideConfigurer">getBeansConfig()</a></span> - Method in <a href="org/grails/spring/context/support/MapBasedSmartPropertyOverrideConfigurer.html">MapBasedSmartPropertyOverrideConfigurer</a>
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="org/grails/spring/beans/factory/GenericBeanFactoryAccessor.html#getBeansOfType(Class<T>, boolean, boolean)" title="Method in GenericBeanFactoryAccessor">getBeansOfType(Class&lt;T&gt;, boolean, boolean)</a></span> - Method in <a href="org/grails/spring/beans/factory/GenericBeanFactoryAccessor.html">GenericBeanFactoryAccessor</a>
@@ -26513,6 +26538,14 @@ if (location.href.indexOf('is-external=true') == -1) {
 </dt><dd><div class="block">Thrown when creation of the Grails domain from the Grails domain classes fails.</div></dd>
 <dt><span class="strong"><a href="org/grails/core/exceptions/GrailsDomainException.html#GrailsDomainException(java.lang.Throwable)" title="Constructor in GrailsDomainException">GrailsDomainException(java.lang.Throwable)</a></span> - Constructor in <a href="org/grails/core/exceptions/GrailsDomainException.html">GrailsDomainException</a>
 </dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="grails/boot/config/GrailsEarlyPluginRegistrationPostProcessor.html" title="Class in grails.boot.config">GrailsEarlyPluginRegistrationPostProcessor</a></span> - Class in <a href="./grails/boot/config/package-summary.html">grails.boot.config</a>
+</dt><dd><div class="block">Runs the plugin bean-registration phase of the Grails lifecycle <em>before</em> Spring Boot's
+ auto-configuration is processed, so that beans contributed by plugins via <CODE>doWithSpring</CODE>
+ are already present in the registry when Boot evaluates its <CODE>@ConditionalOnMissingBean</CODE>
+ guards — auto-configured defaults then back off in favour of the plugin beans, without any
+ override or removal afterwards.</div></dd>
+<dt><span class="strong"><a href="grails/boot/config/GrailsEarlyPluginRegistrationPostProcessor.html#GrailsEarlyPluginRegistrationPostProcessor(org.springframework.context.ConfigurableApplicationContext)" title="Constructor in GrailsEarlyPluginRegistrationPostProcessor">GrailsEarlyPluginRegistrationPostProcessor(org.springframework.context.ConfigurableApplicationContext)</a></span> - Constructor in <a href="grails/boot/config/GrailsEarlyPluginRegistrationPostProcessor.html">GrailsEarlyPl [...]
+</dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="grails/build/logging/GrailsEclipseConsole.html" title="Class in grails.build.logging">GrailsEclipseConsole</a></span> - Class in <a href="./grails/build/logging/package-summary.html">grails.build.logging</a>
 </dt><dd><div class="block">This class is meant to keep changes made in support of Eclipse separate from
  the standard GrailsConsole implementation.</div></dd>
@@ -26801,6 +26834,11 @@ if (location.href.indexOf('is-external=true') == -1) {
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="grails/plugins/GrailsPluginInfo.html" title="Interface in grails.plugins">GrailsPluginInfo</a></span> - Interface in <a href="./grails/plugins/package-summary.html">grails.plugins</a>
 </dt><dd><div class="block">Base interface that just contains information about a particular plugin.</div></dd>
+<dt><span class="strong"><a href="grails/boot/config/GrailsPluginLifecycleInitializer.html" title="Class in grails.boot.config">GrailsPluginLifecycleInitializer</a></span> - Class in <a href="./grails/boot/config/package-summary.html">grails.boot.config</a>
+</dt><dd><div class="block">Registers the <a href='../../../grails/boot/config/GrailsEarlyPluginRegistrationPostProcessor.html' title='GrailsEarlyPluginRegistrationPostProcessor'>GrailsEarlyPluginRegistrationPostProcessor</a> on the context via
+ <CODE>addBeanFactoryPostProcessor</CODE>, which guarantees it runs ahead of Spring Boot's
+ registry-discovered post-processors (including <CODE>ConfigurationClassPostProcessor</CODE>,
+ which expands auto-configuration). </div></dd>
 <dt><span class="strong"><a href="grails/plugins/GrailsPluginManager.html" title="Interface in grails.plugins">GrailsPluginManager</a></span> - Interface in <a href="./grails/plugins/package-summary.html">grails.plugins</a>
 </dt><dd><div class="block">Handles the loading and management of plugins in the Grails framework.</div></dd>
 <dt><span class="strong"><a href="grails/plugins/GrailsPluginSorter.html" title="Class in grails.plugins">GrailsPluginSorter</a></span> - Class in <a href="./grails/plugins/package-summary.html">grails.plugins</a>
@@ -30217,6 +30255,8 @@ if (location.href.indexOf('is-external=true') == -1) {
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="grails/core/GrailsControllerClass.html#initialize()" title="Method in GrailsControllerClass">initialize()</a></span> - Method in <a href="grails/core/GrailsControllerClass.html">GrailsControllerClass</a>
 </dt><dd> <div class="block">Initialize the controller class</div></dd>
+<dt><span class="strong"><a href="grails/boot/config/GrailsPluginLifecycleInitializer.html#initialize(org.springframework.context.ConfigurableApplicationContext)" title="Method in GrailsPluginLifecycleInitializer">initialize(org.springframework.context.ConfigurableApplicationContext)</a></span> - Method in <a href="grails/boot/config/GrailsPluginLifecycleInitializer.html">GrailsPluginLifecycleInitializer</a>
+</dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="org/grails/orm/hibernate/cfg/domainbinding/generator/GrailsSequenceStyleGenerator.html#initialize(org.hibernate.boot.model.relational.SqlStringGenerationContext)" title="Method in GrailsSequenceStyleGenerator">initialize(org.hibernate.boot.model.relational.SqlStringGenerationContext)</a></span> - Method in <a href="org/grails/orm/hibernate/cfg/domainbinding/generator/GrailsSequenceStyleGenerator.html">GrailsSequenceStyleGenerator</a>
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="org/grails/gsp/GroovyPageMetaInfo.html#initialize()" title="Method in GroovyPageMetaInfo">initialize()</a></span> - Method in <a href="org/grails/gsp/GroovyPageMetaInfo.html">GroovyPageMetaInfo</a>
@@ -33123,6 +33163,8 @@ if (location.href.indexOf('is-external=true') == -1) {
 <dt><span class="strong"><a href="org/grails/cli/command/run/SpringApplicationRunnerConfiguration.html#isWatchForFileChanges()" title="Method in SpringApplicationRunnerConfiguration">isWatchForFileChanges()</a></span> - Method in <a href="org/grails/cli/command/run/SpringApplicationRunnerConfiguration.html">SpringApplicationRunnerConfiguration</a>
 </dt><dd> <div class="block">Returns <CODE>true</CODE> if the source file should be monitored for changes and
  automatically recompiled.</div></dd>
+<dt><span class="strong"><a href="org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#isWebApplicationRegistry(org.springframework.beans.factory.support.BeanDefinitionRegistry)" title="Method in AbstractDatastoreInitializer">isWebApplicationRegistry(org.springframework.beans.factory.support.BeanDefinitionRegistry)</a></span> - Method in <a href="org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html">AbstractDatastoreInitializer</a>
+</dt><dd> <div class="block">Determines whether the given registry belongs to a web application. </div></dd>
 <dt><span class="strong"><a href="org/grails/compiler/WhereQueryTypeCheckingExtension.html#isWhereQueryCall(org.codehaus.groovy.ast.expr.MethodCall)" title="Method in WhereQueryTypeCheckingExtension">isWhereQueryCall(org.codehaus.groovy.ast.expr.MethodCall)</a></span> - Method in <a href="org/grails/compiler/WhereQueryTypeCheckingExtension.html">WhereQueryTypeCheckingExtension</a>
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="grails/build/logging/GrailsConsole.html#isWindows()" title="Method in GrailsConsole">isWindows()</a></span> - Method in <a href="grails/build/logging/GrailsConsole.html">GrailsConsole</a>
@@ -34715,6 +34757,8 @@ if (location.href.indexOf('is-external=true') == -1) {
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="org/grails/spring/RuntimeSpringConfigUtilities.html#loadSpringGroovyResourcesIntoContext(org.grails.spring.RuntimeSpringConfiguration, grails.core.GrailsApplication, org.springframework.context.support.GenericApplicationContext)" title="Method in RuntimeSpringConfigUtilities">loadSpringGroovyResourcesIntoContext(org.grails.spring.RuntimeSpringConfiguration, grails.core.GrailsApplication, org.springframework.context.support.GenericApplicationContext)</a>< [...]
 </dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="grails/boot/config/ApplicationArtefactScanner.html#loadTransformedClasses(java.lang.ClassLoader)" title="Method in ApplicationArtefactScanner">loadTransformedClasses(java.lang.ClassLoader)</a></span> - Method in <a href="grails/boot/config/ApplicationArtefactScanner.html">ApplicationArtefactScanner</a>
+</dt><dd> <div class="block">Loads the classes registered by Grails artefact transformations at compile time.</div></dd>
 <dt><span class="strong"><a href="grails/plugin/springsecurity/rest/token/storage/GormTokenStorageService.html#loadUserByToken(java.lang.String)" title="Method in GormTokenStorageService">loadUserByToken(java.lang.String)</a></span> - Method in <a href="grails/plugin/springsecurity/rest/token/storage/GormTokenStorageService.html">GormTokenStorageService</a>
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="grails/plugin/springsecurity/rest/token/storage/GrailsCacheTokenStorageService.html#loadUserByToken(java.lang.String)" title="Method in GrailsCacheTokenStorageService">loadUserByToken(java.lang.String)</a></span> - Method in <a href="grails/plugin/springsecurity/rest/token/storage/GrailsCacheTokenStorageService.html">GrailsCacheTokenStorageService</a>
@@ -38561,6 +38605,8 @@ if (location.href.indexOf('is-external=true') == -1) {
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="grails/boot/config/GrailsApplicationPostProcessor.html#onApplicationEvent(org.springframework.context.event.ApplicationContextEvent)" title="Method in GrailsApplicationPostProcessor">onApplicationEvent(org.springframework.context.event.ApplicationContextEvent)</a></span> - Method in <a href="grails/boot/config/GrailsApplicationPostProcessor.html">GrailsApplicationPostProcessor</a>
 </dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="grails/boot/config/GrailsEarlyPluginRegistrationPostProcessor.html#onApplicationEvent(org.springframework.context.event.ContextRefreshedEvent)" title="Method in GrailsEarlyPluginRegistrationPostProcessor">onApplicationEvent(org.springframework.context.event.ContextRefreshedEvent)</a></span> - Method in <a href="grails/boot/config/GrailsEarlyPluginRegistrationPostProcessor.html">GrailsEarlyPluginRegistrationPostProcessor</a>
+</dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="org/apache/grails/web/layout/GrailsLayoutViewResolver.html#onApplicationEvent(org.springframework.context.event.ContextRefreshedEvent)" title="Method in GrailsLayoutViewResolver">onApplicationEvent(org.springframework.context.event.ContextRefreshedEvent)</a></span> - Method in <a href="org/apache/grails/web/layout/GrailsLayoutViewResolver.html">GrailsLayoutViewResolver</a>
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="org/apache/grails/web/layout/GroovyPageLayoutFinder.html#onApplicationEvent(org.springframework.context.event.ContextRefreshedEvent)" title="Method in GroovyPageLayoutFinder">onApplicationEvent(org.springframework.context.event.ContextRefreshedEvent)</a></span> - Method in <a href="org/apache/grails/web/layout/GroovyPageLayoutFinder.html">GroovyPageLayoutFinder</a>
@@ -40701,12 +40747,18 @@ if (location.href.indexOf('is-external=true') == -1) {
 <dt><span class="strong"><a href="org/grails/transaction/TransactionManagerPostProcessor.html#postProcessAfterInstantiation(java.lang.Object, java.lang.String)" title="Method in TransactionManagerPostProcessor">postProcessAfterInstantiation(java.lang.Object, java.lang.String)</a></span> - Method in <a href="org/grails/transaction/TransactionManagerPostProcessor.html">TransactionManagerPostProcessor</a>
 </dt><dd> <div class="block">Injects the platform transaction manager into the given bean if
  that bean implements the <a href='../../../grails/transaction/TransactionManagerAware.html' title='TransactionManagerAware'>TransactionManagerAware</a> interface.</div></dd>
+<dt><span class="strong"><a href="grails/boot/GrailsApp.html#postProcessApplicationContext(org.springframework.context.ConfigurableApplicationContext)" title="Method in GrailsApp">postProcessApplicationContext(org.springframework.context.ConfigurableApplicationContext)</a></span> - Method in <a href="grails/boot/GrailsApp.html">GrailsApp</a>
+</dt><dd> <div class="block">Stashes the application source classes as a well-known singleton so that
+ <CODE>GrailsEarlyPluginRegistrationPostProcessor</CODE> can perform artefact discovery before
+ Spring Boot auto-configuration is processed. </div></dd>
 <dt><span class="strong"><a href="org/grails/transaction/ChainedTransactionManagerPostProcessor.html#postProcessBeanDefinitionRegistry(org.springframework.beans.factory.support.BeanDefinitionRegistry)" title="Method in ChainedTransactionManagerPostProcessor">postProcessBeanDefinitionRegistry(org.springframework.beans.factory.support.BeanDefinitionRegistry)</a></span> - Method in <a href="org/grails/transaction/ChainedTransactionManagerPostProcessor.html">ChainedTransactionManagerPostProc [...]
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="org/grails/testing/GrailsApplicationBuilder.TestRuntimeGrailsApplicationPostProcessor.html#postProcessBeanDefinitionRegistry(org.springframework.beans.factory.support.BeanDefinitionRegistry)" title="Method in GrailsApplicationBuilder.TestRuntimeGrailsApplicationPostProcessor">postProcessBeanDefinitionRegistry(org.springframework.beans.factory.support.BeanDefinitionRegistry)</a></span> - Method in <a href="org/grails/testing/GrailsApplicationBuilder.TestR [...]
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="grails/boot/config/GrailsApplicationPostProcessor.html#postProcessBeanDefinitionRegistry(org.springframework.beans.factory.support.BeanDefinitionRegistry)" title="Method in GrailsApplicationPostProcessor">postProcessBeanDefinitionRegistry(org.springframework.beans.factory.support.BeanDefinitionRegistry)</a></span> - Method in <a href="grails/boot/config/GrailsApplicationPostProcessor.html">GrailsApplicationPostProcessor</a>
 </dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="grails/boot/config/GrailsEarlyPluginRegistrationPostProcessor.html#postProcessBeanDefinitionRegistry(org.springframework.beans.factory.support.BeanDefinitionRegistry)" title="Method in GrailsEarlyPluginRegistrationPostProcessor">postProcessBeanDefinitionRegistry(org.springframework.beans.factory.support.BeanDefinitionRegistry)</a></span> - Method in <a href="grails/boot/config/GrailsEarlyPluginRegistrationPostProcessor.html">GrailsEarlyPluginRegistration [...]
+</dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="org/apache/grails/web/layout/GrailsLayoutViewResolverPostProcessor.html#postProcessBeanDefinitionRegistry(org.springframework.beans.factory.support.BeanDefinitionRegistry)" title="Method in GrailsLayoutViewResolverPostProcessor">postProcessBeanDefinitionRegistry(org.springframework.beans.factory.support.BeanDefinitionRegistry)</a></span> - Method in <a href="org/apache/grails/web/layout/GrailsLayoutViewResolverPostProcessor.html">GrailsLayoutViewResolver [...]
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="org/grails/plugins/web/GroovyPagesPostProcessor.html#postProcessBeanDefinitionRegistry(org.springframework.beans.factory.support.BeanDefinitionRegistry)" title="Method in GroovyPagesPostProcessor">postProcessBeanDefinitionRegistry(org.springframework.beans.factory.support.BeanDefinitionRegistry)</a></span> - Method in <a href="org/grails/plugins/web/GroovyPagesPostProcessor.html">GroovyPagesPostProcessor</a>
@@ -45186,6 +45238,9 @@ if (location.href.indexOf('is-external=true') == -1) {
 </dt><dd> <div class="block">Scans the classpath for entities for the given packages</div></dd>
 <dt><span class="strong"><a href="grails/boot/config/tools/ClassPathScanner.html#scan(java.lang.ClassLoader, org.springframework.core.io.support.ResourcePatternResolver, Collection<String>, Closure<Boolean>)" title="Method in ClassPathScanner">scan(java.lang.ClassLoader, org.springframework.core.io.support.ResourcePatternResolver, Collection&lt;String&gt;, Closure&lt;Boolean&gt;)</a></span> - Method in <a href="grails/boot/config/tools/ClassPathScanner.html">ClassPathScanner</a>
 </dt><dd> <div class="block">Scans for classes in the given package names</div></dd>
+<dt><span class="strong"><a href="grails/boot/config/ApplicationArtefactScanner.html#scanApplicationClasses(Class<?>, Collection<String>)" title="Method in ApplicationArtefactScanner">scanApplicationClasses(Class&lt;?&gt;, Collection&lt;String&gt;)</a></span> - Method in <a href="grails/boot/config/ApplicationArtefactScanner.html">ApplicationArtefactScanner</a>
+</dt><dd> <div class="block">Scans for application classes in the given packages relative to the given application class,
+ including any classes registered by Grails artefact transformations.</div></dd>
 <dt><span class="strong"><a href="org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#scanForPersistentClasses()" title="Method in AbstractDatastoreInitializer">scanForPersistentClasses()</a></span> - Method in <a href="org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html">AbstractDatastoreInitializer</a>
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="org/grails/orm/hibernate/cfg/HibernateMappingContextConfiguration.html#scanPackages(java.lang.String)" title="Method in HibernateMappingContextConfiguration">scanPackages(java.lang.String)</a></span> - Method in <a href="org/grails/orm/hibernate/cfg/HibernateMappingContextConfiguration.html">HibernateMappingContextConfiguration</a>
@@ -45883,6 +45938,8 @@ if (location.href.indexOf('is-external=true') == -1) {
 </dt><dd> <div class="block">Assigns the GrailsApplication instance to be used by this plugin manager.</div></dd>
 <dt><span class="strong"><a href="grails/plugin/springsecurity/SpringSecurityUtils.html#setApplication(grails.core.GrailsApplication)" title="Method in SpringSecurityUtils">setApplication(grails.core.GrailsApplication)</a></span> - Method in <a href="grails/plugin/springsecurity/SpringSecurityUtils.html">SpringSecurityUtils</a>
 </dt><dd> <div class="block">Set at startup by plugin.</div></dd>
+<dt><span class="strong"><a href="grails/core/DefaultGrailsApplication.html#setApplicationClass(grails.core.GrailsApplicationClass)" title="Method in DefaultGrailsApplication">setApplicationClass(grails.core.GrailsApplicationClass)</a></span> - Method in <a href="grails/core/DefaultGrailsApplication.html">DefaultGrailsApplication</a>
+</dt><dd> <div class="block">Sets the application class. </div></dd>
 <dt><span class="strong"><a href="org/grails/datastore/mapping/core/AbstractDatastore.html#setApplicationContext(org.springframework.context.ApplicationContext)" title="Method in AbstractDatastore">setApplicationContext(org.springframework.context.ApplicationContext)</a></span> - Method in <a href="org/grails/datastore/mapping/core/AbstractDatastore.html">AbstractDatastore</a>
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="org/grails/core/AbstractGrailsApplication.html#setApplicationContext(org.springframework.context.ApplicationContext)" title="Method in AbstractGrailsApplication">setApplicationContext(org.springframework.context.ApplicationContext)</a></span> - Method in <a href="org/grails/core/AbstractGrailsApplication.html">AbstractGrailsApplication</a>
@@ -54551,6 +54608,8 @@ if (location.href.indexOf('is-external=true') == -1) {
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="org/grails/core/io/PluginPathAwareFileSystemResourceLoader.html#WEB_APP_DIRECTORY" title="Field in PluginPathAwareFileSystemResourceLoader">WEB_APP_DIRECTORY</a></span> - Field in <a href="org/grails/core/io/PluginPathAwareFileSystemResourceLoader.html">PluginPathAwareFileSystemResourceLoader</a>
 </dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#WEB_APPLICATION_CONTEXT_CLASS_NAME" title="Field in AbstractDatastoreInitializer">WEB_APPLICATION_CONTEXT_CLASS_NAME</a></span> - Field in <a href="org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html">AbstractDatastoreInitializer</a>
+</dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="grails/plugin/springsecurity/SecurityFilterPosition.html#WEB_ASYNC_MANAGER_FILTER" title="Enum Constant in SecurityFilterPosition">WEB_ASYNC_MANAGER_FILTER</a></span> - Enum Constant in <a href="grails/plugin/springsecurity/SecurityFilterPosition.html">SecurityFilterPosition</a>
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="org/grails/io/support/GrailsResourceUtils.html#WEB_INF" title="Field in GrailsResourceUtils">WEB_INF</a></span> - Field in <a href="org/grails/io/support/GrailsResourceUtils.html">GrailsResourceUtils</a>
diff --git a/docs/snapshot/api/org/apache/grails/web/layout/LayoutGrailsPlugin.html b/docs/snapshot/api/org/apache/grails/web/layout/LayoutGrailsPlugin.html
index ba0a9b6b7a5..24aab4b70fc 100644
--- a/docs/snapshot/api/org/apache/grails/web/layout/LayoutGrailsPlugin.html
+++ b/docs/snapshot/api/org/apache/grails/web/layout/LayoutGrailsPlugin.html
@@ -304,7 +304,7 @@ extends <a href='../../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../../../grails/plugins/Plugin.html#ge [...]
+                            <td class="colLast"><code><a href='../../../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../../grails/plugins/Plugin.html# [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html b/docs/snapshot/api/org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html
index ac5e7edd1aa..e6e74bdac96 100644
--- a/docs/snapshot/api/org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html
+++ b/docs/snapshot/api/org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html
@@ -187,12 +187,18 @@ implements <a href='../../../../../org.springframework.context.ResourceLoaderAwa
                         </tr>
                         
                         <tr class="rowColor">
+                            <td class="colFirst"><code><strong>static&nbsp;java.lang.String</strong></code>&nbsp;</td>
+                            <td class="colLast"><code><a href="#WEB_APPLICATION_CONTEXT_CLASS_NAME">WEB_APPLICATION_CONTEXT_CLASS_NAME</a></code></td>
+                            <td class="colLast"></td>
+                        </tr>
+                        
+                        <tr class="altColor">
                             <td class="colFirst"><code><strong>protected&nbsp;java.lang.ClassLoader</strong></code>&nbsp;</td>
                             <td class="colLast"><code><a href="#classLoader">classLoader</a></code></td>
                             <td class="colLast"></td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code><strong>protected&nbsp;boolean</strong></code>&nbsp;</td>
                             <td class="colLast"><code><a href="#secondaryDatastore">secondaryDatastore</a></code></td>
                             <td class="colLast"></td>
@@ -426,24 +432,30 @@ implements <a href='../../../../../org.springframework.context.ResourceLoaderAwa
                         </tr>
                         
                         <tr class="altColor">
+                            <td class="colFirst"><code></code></td>
+                            <td class="colLast"><code>protected&nbsp;boolean</code></td>
+                            <td class="colLast"><code><strong><a href="#isWebApplicationRegistry(org.springframework.beans.factory.support.BeanDefinitionRegistry)">isWebApplicationRegistry</a></strong>(<a href='../../../../../org.springframework.beans.factory.support.BeanDefinitionRegistry.html'>BeanDefinitionRegistry</a> registry)</code><br>Determines whether the given registry belongs to a web application. </td>
+                        </tr>
+                        
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>protected&nbsp;java.util.Map&lt;java.lang.String, java.lang.Class&lt;?&gt;&gt;</code></td>
                             <td class="colLast"><code><strong><a href="#loadDataServices(java.lang.String)">loadDataServices</a></strong>(java.lang.String secondaryDatastore)</code><br></td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>protected&nbsp;void</code></td>
                             <td class="colLast"><code><strong><a href="#scanForPersistentClasses()">scanForPersistentClasses</a></strong>()</code><br></td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>void</code></td>
                             <td class="colLast"><code><strong><a href="#setResourceLoader(org.springframework.core.io.ResourceLoader)">setResourceLoader</a></strong>(<a href='../../../../../org.springframework.core.io.ResourceLoader.html'>ResourceLoader</a> resourceLoader)</code><br></td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>void</code></td>
                             <td class="colLast"><code><strong><a href="#setSecondaryDatastore(boolean)">setSecondaryDatastore</a></strong>(boolean secondaryDatastore)</code><br>Whether this datastore is secondary to another primary datastore (example the SQL DB)</td>
@@ -514,6 +526,14 @@ implements <a href='../../../../../org.springframework.context.ResourceLoaderAwa
                             </li>
                         </ul>
                     
+                        <a name="WEB_APPLICATION_CONTEXT_CLASS_NAME"><!-- --></a>
+                        <ul class="blockListLast">
+                            <li class="blockList">
+                                <h4>public&nbsp;static&nbsp;final&nbsp;java.lang.String <strong>WEB_APPLICATION_CONTEXT_CLASS_NAME</strong></h4>
+                                <p></p>
+                            </li>
+                        </ul>
+                    
                         <a name="classLoader"><!-- --></a>
                         <ul class="blockListLast">
                             <li class="blockList">
@@ -809,6 +829,17 @@ implements <a href='../../../../../org.springframework.context.ResourceLoaderAwa
                             </li>
                         </ul>
                     
+                        <a name="isWebApplicationRegistry(org.springframework.beans.factory.support.BeanDefinitionRegistry)"><!-- --></a>
+                        <ul class="blockListLast">
+                            <li class="blockList">
+                                <h4>protected&nbsp;boolean <strong>isWebApplicationRegistry</strong>(<a href='../../../../../org.springframework.beans.factory.support.BeanDefinitionRegistry.html'>BeanDefinitionRegistry</a> registry)</h4>
+                                <p> Determines whether the given registry belongs to a web application. The presence of the
+ <CODE>dispatcherServlet</CODE> bean definition is only a reliable signal after Spring Boot
+ auto-configuration has been processed; Grails plugin bean definitions register before
+ that, so the type of the registry (the web application context itself) is checked as well. <DL><DT><B>Parameters:</B></DT><DD><code>registry</code> -  The bean definition registry</DD></DL><DL><DT><B>Returns:</B></DT><DD>true if the registry belongs to a web application</DD></DL></p>
+                            </li>
+                        </ul>
+                    
                         <a name="loadDataServices(java.lang.String)"><!-- --></a>
                         <ul class="blockListLast">
                             <li class="blockList">
diff --git a/docs/snapshot/api/org/grails/gorm/graphql/plugin/GormGraphqlGrailsPlugin.html b/docs/snapshot/api/org/grails/gorm/graphql/plugin/GormGraphqlGrailsPlugin.html
index d8e1f2fcb5a..44312a95649 100644
--- a/docs/snapshot/api/org/grails/gorm/graphql/plugin/GormGraphqlGrailsPlugin.html
+++ b/docs/snapshot/api/org/grails/gorm/graphql/plugin/GormGraphqlGrailsPlugin.html
@@ -305,7 +305,7 @@ extends <a href='../../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../../../grails/plugins/Plugin.html#ge [...]
+                            <td class="colLast"><code><a href='../../../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../../grails/plugins/Plugin.html# [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/org/grails/plugins/BinaryGrailsPlugin.html b/docs/snapshot/api/org/grails/plugins/BinaryGrailsPlugin.html
index aa063f8533b..e72bd6d5288 100644
--- a/docs/snapshot/api/org/grails/plugins/BinaryGrailsPlugin.html
+++ b/docs/snapshot/api/org/grails/plugins/BinaryGrailsPlugin.html
@@ -306,7 +306,7 @@ extends <a href='../../../org/grails/plugins/DefaultGrailsPlugin.html'>DefaultGr
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../org/grails/plugins/DefaultGrailsPlugin.html'>DefaultGrailsPlugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../org/grails/plugins/DefaultGrailsPlugin.html#addExclude(grails.util.Environment)'>addExclude</a>, <a href='../../../org/grails/plugins/DefaultGrailsPlugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../org/grails/plugins/DefaultGrailsPlugin.html#doArtefactConfiguration()'>doArtefactConfiguration</a>, <a href='../../../org/grails/plugins/DefaultGrailsPlugin.html#doWithApplicationContext(org.springframewo [...]
+                            <td class="colLast"><code><a href='../../../org/grails/plugins/DefaultGrailsPlugin.html#addExclude(grails.util.Environment)'>addExclude</a>, <a href='../../../org/grails/plugins/DefaultGrailsPlugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../org/grails/plugins/DefaultGrailsPlugin.html#doArtefactConfiguration()'>doArtefactConfiguration</a>, <a href='../../../org/grails/plugins/DefaultGrailsPlugin.html#doWithApplicationContext(org.springframewo [...]
                         </tr>
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../org/grails/plugins/AbstractGrailsPlugin.html'>AbstractGrailsPlugin</a></code></td>
diff --git a/docs/snapshot/api/org/grails/plugins/CoreGrailsPlugin.html b/docs/snapshot/api/org/grails/plugins/CoreGrailsPlugin.html
index 87a4b9b99ad..de49b47ff1c 100644
--- a/docs/snapshot/api/org/grails/plugins/CoreGrailsPlugin.html
+++ b/docs/snapshot/api/org/grails/plugins/CoreGrailsPlugin.html
@@ -257,7 +257,7 @@ extends <a href='../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../grails/plugins/Plugin.html#getApplicationContext()'>getAppl [...]
+                            <td class="colLast"><code><a href='../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</ [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/org/grails/plugins/DefaultGrailsPlugin.html b/docs/snapshot/api/org/grails/plugins/DefaultGrailsPlugin.html
index 4c452c292b8..454db94be40 100644
--- a/docs/snapshot/api/org/grails/plugins/DefaultGrailsPlugin.html
+++ b/docs/snapshot/api/org/grails/plugins/DefaultGrailsPlugin.html
@@ -275,204 +275,210 @@ implements <a href='../../../grails/core/support/ParentApplicationContextAware.h
                         </tr>
                         
                         <tr class="altColor">
+                            <td class="colFirst"><code></code></td>
+                            <td class="colLast"><code>public&nbsp;<a href='../../../org.springframework.beans.factory.BeanRegistrar.html'>BeanRegistrar</a></code></td>
+                            <td class="colLast"><code><strong><a href="#getBeanRegistrar()">getBeanRegistrar</a></strong>()</code><br></td>
+                        </tr>
+                        
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;java.lang.String[]</code></td>
                             <td class="colLast"><code><strong><a href="#getDependencyNames()">getDependencyNames</a></strong>()</code><br></td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;java.lang.String</code></td>
                             <td class="colLast"><code><strong><a href="#getDependentVersion(java.lang.String)">getDependentVersion</a></strong>(java.lang.String name)</code><br></td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;<a href='../../../org/grails/io/support/Resource.html'>Resource</a></code></td>
                             <td class="colLast"><code><strong><a href="#getDescriptor()">getDescriptor</a></strong>()</code><br></td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;java.lang.String</code></td>
                             <td class="colLast"><code><strong><a href="#getFullName()">getFullName</a></strong>()</code><br></td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;groovy.lang.GroovyObject</code></td>
                             <td class="colLast"><code><strong><a href="#getInstance()">getInstance</a></strong>()</code><br></td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;java.lang.String[]</code></td>
                             <td class="colLast"><code><strong><a href="#getLoadAfterNames()">getLoadAfterNames</a></strong>()</code><br></td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;java.lang.String[]</code></td>
                             <td class="colLast"><code><strong><a href="#getLoadBeforeNames()">getLoadBeforeNames</a></strong>()</code><br></td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;<a href='../../../org.apache.commons.logging.Log.html'>Log</a></code></td>
                             <td class="colLast"><code><strong><a href="#getLog()">getLog</a></strong>()</code><br></td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;java.lang.String</code></td>
                             <td class="colLast"><code><strong><a href="#getName()">getName</a></strong>()</code><br></td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;java.lang.String[]</code></td>
                             <td class="colLast"><code><strong><a href="#getObservedPluginNames()">getObservedPluginNames</a></strong>()</code><br></td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;<a href='../../../org.springframework.context.ApplicationContext.html'>ApplicationContext</a></code></td>
                             <td class="colLast"><code><strong><a href="#getParentCtx()">getParentCtx</a></strong>()</code><br></td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;<a href='../../../grails/plugins/GrailsPlugin.html'>GrailsPlugin</a></code></td>
                             <td class="colLast"><code><strong><a href="#getPlugin()">getPlugin</a></strong>()</code><br></td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;<a href='../../../org/grails/io/support/Resource.html'>Resource</a></code></td>
                             <td class="colLast"><code><strong><a href="#getPluginDir()">getPluginDir</a></strong>()</code><br></td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;java.util.List&lt;java.lang.String&gt;</code></td>
                             <td class="colLast"><code><strong><a href="#getPluginExcludes()">getPluginExcludes</a></strong>()</code><br></td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;java.util.Map</code></td>
                             <td class="colLast"><code><strong><a href="#getProperties()">getProperties</a></strong>()</code><br></td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;java.lang.Class&lt;?&gt;[]</code></td>
                             <td class="colLast"><code><strong><a href="#getProvidedArtefacts()">getProvidedArtefacts</a></strong>()</code><br></td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;<a href='../../../org.springframework.core.io.support.PathMatchingResourcePatternResolver.html'>PathMatchingResourcePatternResolver</a></code></td>
                             <td class="colLast"><code><strong><a href="#getResolver()">getResolver</a></strong>()</code><br> <DL><DT><B>Returns:</B></DT><DD>the resolver</DD></DL></td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;java.util.Collection&lt;? extends TypeFilter&gt;</code></td>
                             <td class="colLast"><code><strong><a href="#getTypeFilters()">getTypeFilters</a></strong>()</code><br></td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;java.util.List&lt;<a href='../../../org/grails/plugins/support/WatchPattern.html' title='WatchPattern'>WatchPattern</a>&gt;</code></td>
                             <td class="colLast"><code><strong><a href="#getWatchedResourcePatterns()">getWatchedResourcePatterns</a></strong>()</code><br></td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;<a href='../../../org.springframework.core.io.Resource.html'>Resource</a>[]</code></td>
                             <td class="colLast"><code><strong><a href="#getWatchedResources()">getWatchedResources</a></strong>()</code><br> <DL><DT><B>Returns:</B></DT><DD>the watchedResources</DD></DL></td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;boolean</code></td>
                             <td class="colLast"><code><strong><a href="#hasInterestInChange(java.lang.String)">hasInterestInChange</a></strong>(java.lang.String path)</code><br></td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;boolean</code></td>
                             <td class="colLast"><code><strong><a href="#isEnabled(java.lang.String)">isEnabled</a></strong>(java.lang.String[] activeProfiles)</code><br></td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;boolean</code></td>
                             <td class="colLast"><code><strong><a href="#isEnabled()">isEnabled</a></strong>()</code><br></td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;void</code></td>
                             <td class="colLast"><code><strong><a href="#notifyOfEvent(java.util.Map)">notifyOfEvent</a></strong>(java.util.Map event)</code><br></td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;java.util.Map</code></td>
                             <td class="colLast"><code><strong><a href="#notifyOfEvent(int, java.lang.Object)">notifyOfEvent</a></strong>(int eventKind, java.lang.Object source)</code><br></td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;void</code></td>
                             <td class="colLast"><code><strong><a href="#refresh()">refresh</a></strong>()</code><br></td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;void</code></td>
                             <td class="colLast"><code><strong><a href="#setApplicationContext(org.springframework.context.ApplicationContext)">setApplicationContext</a></strong>(<a href='../../../org.springframework.context.ApplicationContext.html'>ApplicationContext</a> applicationContext)</code><br></td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;void</code></td>
                             <td class="colLast"><code><strong><a href="#setDescriptor(org.springframework.core.io.Resource)">setDescriptor</a></strong>(<a href='../../../org.springframework.core.io.Resource.html'>Resource</a> descriptor)</code><br></td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;void</code></td>
                             <td class="colLast"><code><strong><a href="#setManager(grails.plugins.GrailsPluginManager)">setManager</a></strong>(<a href='../../../grails/plugins/GrailsPluginManager.html'>GrailsPluginManager</a> manager)</code><br></td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;void</code></td>
                             <td class="colLast"><code><strong><a href="#setParentApplicationContext(org.springframework.context.ApplicationContext)">setParentApplicationContext</a></strong>(<a href='../../../org.springframework.context.ApplicationContext.html'>ApplicationContext</a> parent)</code><br></td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;void</code></td>
                             <td class="colLast"><code><strong><a href="#setWatchedResources(org.springframework.core.io.Resource)">setWatchedResources</a></strong>(<a href='../../../org.springframework.core.io.Resource.html'>Resource</a>[] watchedResources)</code><br></td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;boolean</code></td>
                             <td class="colLast"><code><strong><a href="#supportsCurrentScopeAndEnvironment()">supportsCurrentScopeAndEnvironment</a></strong>()</code><br></td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;boolean</code></td>
                             <td class="colLast"><code><strong><a href="#supportsEnvironment(grails.util.Environment)">supportsEnvironment</a></strong>(<a href='../../../grails/util/Environment.html'>Environment</a> environment)</code><br></td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;java.lang.String</code></td>
                             <td class="colLast"><code><strong><a href="#toString()">toString</a></strong>()</code><br></td>
@@ -644,6 +650,14 @@ implements <a href='../../../grails/core/support/ParentApplicationContextAware.h
                             </li>
                         </ul>
                     
+                        <a name="getBeanRegistrar()"><!-- --></a>
+                        <ul class="blockListLast">
+                            <li class="blockList">
+                                <h4>@java.lang.Override<br>public&nbsp;<a href='../../../org.springframework.beans.factory.BeanRegistrar.html'>BeanRegistrar</a> <strong>getBeanRegistrar</strong>()</h4>
+                                <p></p>
+                            </li>
+                        </ul>
+                    
                         <a name="getDependencyNames()"><!-- --></a>
                         <ul class="blockListLast">
                             <li class="blockList">
diff --git a/docs/snapshot/api/org/grails/plugins/codecs/CodecsGrailsPlugin.html b/docs/snapshot/api/org/grails/plugins/codecs/CodecsGrailsPlugin.html
index 4a396c0a3a8..1a8aff2c5e1 100644
--- a/docs/snapshot/api/org/grails/plugins/codecs/CodecsGrailsPlugin.html
+++ b/docs/snapshot/api/org/grails/plugins/codecs/CodecsGrailsPlugin.html
@@ -240,7 +240,7 @@ extends <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../../grails/plugins/Plugin.html#getApplicationCon [...]
+                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()' [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/org/grails/plugins/converters/ConvertersGrailsPlugin.html b/docs/snapshot/api/org/grails/plugins/converters/ConvertersGrailsPlugin.html
index eadcad027cb..e61fb082fcc 100644
--- a/docs/snapshot/api/org/grails/plugins/converters/ConvertersGrailsPlugin.html
+++ b/docs/snapshot/api/org/grails/plugins/converters/ConvertersGrailsPlugin.html
@@ -261,7 +261,7 @@ extends <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../../grails/plugins/Plugin.html#getApplicationCon [...]
+                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()' [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/org/grails/plugins/databasemigration/DatabaseMigrationGrailsPlugin.html b/docs/snapshot/api/org/grails/plugins/databasemigration/DatabaseMigrationGrailsPlugin.html
index 585c76a8e7c..87a788a6928 100644
--- a/docs/snapshot/api/org/grails/plugins/databasemigration/DatabaseMigrationGrailsPlugin.html
+++ b/docs/snapshot/api/org/grails/plugins/databasemigration/DatabaseMigrationGrailsPlugin.html
@@ -307,7 +307,7 @@ extends <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../../grails/plugins/Plugin.html#getApplicationCon [...]
+                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()' [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/org/grails/plugins/databinding/DataBindingGrailsPlugin.html b/docs/snapshot/api/org/grails/plugins/databinding/DataBindingGrailsPlugin.html
index 3977be00324..f703ae71973 100644
--- a/docs/snapshot/api/org/grails/plugins/databinding/DataBindingGrailsPlugin.html
+++ b/docs/snapshot/api/org/grails/plugins/databinding/DataBindingGrailsPlugin.html
@@ -225,7 +225,7 @@ extends <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../../grails/plugins/Plugin.html#getApplicationCon [...]
+                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()' [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/org/grails/plugins/datasource/DataSourceGrailsPlugin.html b/docs/snapshot/api/org/grails/plugins/datasource/DataSourceGrailsPlugin.html
index 08c48d4a1e9..4f6575012c8 100644
--- a/docs/snapshot/api/org/grails/plugins/datasource/DataSourceGrailsPlugin.html
+++ b/docs/snapshot/api/org/grails/plugins/datasource/DataSourceGrailsPlugin.html
@@ -290,7 +290,7 @@ extends <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../../grails/plugins/Plugin.html#getApplicationCon [...]
+                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()' [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/org/grails/plugins/domain/DomainClassGrailsPlugin.html b/docs/snapshot/api/org/grails/plugins/domain/DomainClassGrailsPlugin.html
index 745d8632290..e642484f4f6 100644
--- a/docs/snapshot/api/org/grails/plugins/domain/DomainClassGrailsPlugin.html
+++ b/docs/snapshot/api/org/grails/plugins/domain/DomainClassGrailsPlugin.html
@@ -261,7 +261,7 @@ extends <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../../grails/plugins/Plugin.html#getApplicationCon [...]
+                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()' [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/org/grails/plugins/events/EventBusGrailsPlugin.html b/docs/snapshot/api/org/grails/plugins/events/EventBusGrailsPlugin.html
index 99c13180dca..bb011b654bf 100644
--- a/docs/snapshot/api/org/grails/plugins/events/EventBusGrailsPlugin.html
+++ b/docs/snapshot/api/org/grails/plugins/events/EventBusGrailsPlugin.html
@@ -267,7 +267,7 @@ extends <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../../grails/plugins/Plugin.html#getApplicationCon [...]
+                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()' [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/org/grails/plugins/i18n/I18nGrailsPlugin.html b/docs/snapshot/api/org/grails/plugins/i18n/I18nGrailsPlugin.html
index 2114acb4395..d0db8422860 100644
--- a/docs/snapshot/api/org/grails/plugins/i18n/I18nGrailsPlugin.html
+++ b/docs/snapshot/api/org/grails/plugins/i18n/I18nGrailsPlugin.html
@@ -263,7 +263,7 @@ extends <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../../grails/plugins/Plugin.html#getApplicationCon [...]
+                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()' [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/org/grails/plugins/services/ServicesGrailsPlugin.html b/docs/snapshot/api/org/grails/plugins/services/ServicesGrailsPlugin.html
index 88e9727d028..84432b60a83 100644
--- a/docs/snapshot/api/org/grails/plugins/services/ServicesGrailsPlugin.html
+++ b/docs/snapshot/api/org/grails/plugins/services/ServicesGrailsPlugin.html
@@ -262,7 +262,7 @@ extends <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../../grails/plugins/Plugin.html#getApplicationCon [...]
+                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()' [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/org/grails/plugins/sitemesh3/Sitemesh3GrailsPlugin.html b/docs/snapshot/api/org/grails/plugins/sitemesh3/Sitemesh3GrailsPlugin.html
index f6cbdd0aeb9..50ad06bb6d5 100644
--- a/docs/snapshot/api/org/grails/plugins/sitemesh3/Sitemesh3GrailsPlugin.html
+++ b/docs/snapshot/api/org/grails/plugins/sitemesh3/Sitemesh3GrailsPlugin.html
@@ -295,7 +295,7 @@ extends <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../../grails/plugins/Plugin.html#getApplicationCon [...]
+                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()' [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/org/grails/plugins/web/GroovyPagesGrailsPlugin.html b/docs/snapshot/api/org/grails/plugins/web/GroovyPagesGrailsPlugin.html
index bbea0de4478..72653a11db8 100644
--- a/docs/snapshot/api/org/grails/plugins/web/GroovyPagesGrailsPlugin.html
+++ b/docs/snapshot/api/org/grails/plugins/web/GroovyPagesGrailsPlugin.html
@@ -329,7 +329,7 @@ extends <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../../grails/plugins/Plugin.html#getApplicationCon [...]
+                            <td class="colLast"><code><a href='../../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../grails/plugins/Plugin.html#doWithSpring()' [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/org/grails/plugins/web/async/ControllersAsyncGrailsPlugin.html b/docs/snapshot/api/org/grails/plugins/web/async/ControllersAsyncGrailsPlugin.html
index 3ee310d8187..fb4aead7848 100644
--- a/docs/snapshot/api/org/grails/plugins/web/async/ControllersAsyncGrailsPlugin.html
+++ b/docs/snapshot/api/org/grails/plugins/web/async/ControllersAsyncGrailsPlugin.html
@@ -252,7 +252,7 @@ extends <a href='../../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../../../grails/plugins/Plugin.html#ge [...]
+                            <td class="colLast"><code><a href='../../../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../../grails/plugins/Plugin.html# [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/org/grails/plugins/web/controllers/ControllersGrailsPlugin.html b/docs/snapshot/api/org/grails/plugins/web/controllers/ControllersGrailsPlugin.html
index d181063be90..268dc0ab8c3 100644
--- a/docs/snapshot/api/org/grails/plugins/web/controllers/ControllersGrailsPlugin.html
+++ b/docs/snapshot/api/org/grails/plugins/web/controllers/ControllersGrailsPlugin.html
@@ -268,7 +268,7 @@ extends <a href='../../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../../../grails/plugins/Plugin.html#ge [...]
+                            <td class="colLast"><code><a href='../../../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../../grails/plugins/Plugin.html# [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/org/grails/plugins/web/interceptors/InterceptorsGrailsPlugin.html b/docs/snapshot/api/org/grails/plugins/web/interceptors/InterceptorsGrailsPlugin.html
index ac79e07468a..e2adb9bbf96 100644
--- a/docs/snapshot/api/org/grails/plugins/web/interceptors/InterceptorsGrailsPlugin.html
+++ b/docs/snapshot/api/org/grails/plugins/web/interceptors/InterceptorsGrailsPlugin.html
@@ -279,7 +279,7 @@ extends <a href='../../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../../../grails/plugins/Plugin.html#ge [...]
+                            <td class="colLast"><code><a href='../../../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../../grails/plugins/Plugin.html# [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/org/grails/plugins/web/mapping/UrlMappingsGrailsPlugin.html b/docs/snapshot/api/org/grails/plugins/web/mapping/UrlMappingsGrailsPlugin.html
index 992095a05b9..a64bde61f4a 100644
--- a/docs/snapshot/api/org/grails/plugins/web/mapping/UrlMappingsGrailsPlugin.html
+++ b/docs/snapshot/api/org/grails/plugins/web/mapping/UrlMappingsGrailsPlugin.html
@@ -290,7 +290,7 @@ extends <a href='../../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../../../grails/plugins/Plugin.html#ge [...]
+                            <td class="colLast"><code><a href='../../../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../../grails/plugins/Plugin.html# [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/org/grails/plugins/web/rest/plugin/RestResponderGrailsPlugin.html b/docs/snapshot/api/org/grails/plugins/web/rest/plugin/RestResponderGrailsPlugin.html
index bb78ea3a3aa..89dbd59640d 100644
--- a/docs/snapshot/api/org/grails/plugins/web/rest/plugin/RestResponderGrailsPlugin.html
+++ b/docs/snapshot/api/org/grails/plugins/web/rest/plugin/RestResponderGrailsPlugin.html
@@ -273,7 +273,7 @@ extends <a href='../../../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../../../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../../../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../../../../../../grails/plugins [...]
+                            <td class="colLast"><code><a href='../../../../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../../../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../../../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../../../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../../../../../../grails/plugi [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/api/org/grails/testing/GrailsApplicationBuilder.TestRuntimeGrailsApplicationPostProcessor.html b/docs/snapshot/api/org/grails/testing/GrailsApplicationBuilder.TestRuntimeGrailsApplicationPostProcessor.html
index bf60e619947..52c50ec2efb 100644
--- a/docs/snapshot/api/org/grails/testing/GrailsApplicationBuilder.TestRuntimeGrailsApplicationPostProcessor.html
+++ b/docs/snapshot/api/org/grails/testing/GrailsApplicationBuilder.TestRuntimeGrailsApplicationPostProcessor.html
@@ -129,7 +129,7 @@ extends <a href='../../../grails/boot/config/GrailsApplicationPostProcessor.html
                         </tr>
                                                 <tr class="altColor">
                             <td class="colFirst"><strong><code>class <a href='../../../grails/boot/config/GrailsApplicationPostProcessor.html'>GrailsApplicationPostProcessor</a></code></strong></td>
-                            <td class="colLast"><code><a href='../../../grails/boot/config/GrailsApplicationPostProcessor.html#applicationContext'>applicationContext</a>, <a href='../../../grails/boot/config/GrailsApplicationPostProcessor.html#pluginManager'>pluginManager</a></code></td>
+                            <td class="colLast"><code><a href='../../../grails/boot/config/GrailsApplicationPostProcessor.html#applicationContext'>applicationContext</a>, <a href='../../../grails/boot/config/GrailsApplicationPostProcessor.html#earlyPluginRegistrationRan'>earlyPluginRegistrationRan</a>, <a href='../../../grails/boot/config/GrailsApplicationPostProcessor.html#pluginManager'>pluginManager</a></code></td>
                         </tr>
 
                     </table>
diff --git a/docs/snapshot/api/redis/RedisGrailsPlugin.html b/docs/snapshot/api/redis/RedisGrailsPlugin.html
index 8668a1aaa50..45801846027 100644
--- a/docs/snapshot/api/redis/RedisGrailsPlugin.html
+++ b/docs/snapshot/api/redis/RedisGrailsPlugin.html
@@ -294,7 +294,7 @@ extends <a href='../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a href='../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../grails/plugins/Plugin.html#getApplicationContext()'>getApplicationContext</a>, <a href='. [...]
+                            <td class="colLast"><code><a href='../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>, <a href='../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>, <a href='../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>, <a href='../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>, <a href='../grails/plugins/Plugin.html#doWithSpring()'>doWithSpring</a>, <a href='../grails/plugins [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/grails-data/api/index-all.html b/docs/snapshot/grails-data/api/index-all.html
index 31684d0c792..5ec1cb15e6f 100644
--- a/docs/snapshot/grails-data/api/index-all.html
+++ b/docs/snapshot/grails-data/api/index-all.html
@@ -6401,6 +6401,8 @@ if (location.href.indexOf('is-external=true') == -1) {
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="org/grails/datastore/mapping/core/impl/PendingUpdateAdapter.html#isVetoed()" title="Method in PendingUpdateAdapter">isVetoed()</a></span> - Method in <a href="org/grails/datastore/mapping/core/impl/PendingUpdateAdapter.html">PendingUpdateAdapter</a>
 </dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#isWebApplicationRegistry(org.springframework.beans.factory.support.BeanDefinitionRegistry)" title="Method in AbstractDatastoreInitializer">isWebApplicationRegistry(org.springframework.beans.factory.support.BeanDefinitionRegistry)</a></span> - Method in <a href="org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html">AbstractDatastoreInitializer</a>
+</dt><dd> <div class="block">Determines whether the given registry belongs to a web application. </div></dd>
 <dt><span class="strong"><a href="org/grails/datastore/gorm/services/implementers/IterableInterfaceProjectionBuilder.html" title="Trait in org.grails.datastore.gorm.services.implementers">IterableInterfaceProjectionBuilder</a></span> - Trait in <a href="./org/grails/datastore/gorm/services/implementers/package-summary.html">org.grails.datastore.gorm.services.implementers</a>
 </dt><dd><div class="block">Projection builder for iterable results like lists and arrays</div></dd>
 <dt><span class="strong"><a href="org/grails/datastore/gorm/services/implementers/IterableProjectionServiceImplementer.html" title="Interface in org.grails.datastore.gorm.services.implementers">IterableProjectionServiceImplementer</a></span> - Interface in <a href="./org/grails/datastore/gorm/services/implementers/package-summary.html">org.grails.datastore.gorm.services.implementers</a>
@@ -10277,6 +10279,8 @@ if (location.href.indexOf('is-external=true') == -1) {
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="org/grails/datastore/gorm/transactions/transform/TransactionalTransform.html#weaveTransactionManagerAware(org.codehaus.groovy.control.SourceUnit, org.codehaus.groovy.ast.AnnotationNode, org.codehaus.groovy.ast.ClassNode)" title="Method in TransactionalTransform">weaveTransactionManagerAware(org.codehaus.groovy.control.SourceUnit, org.codehaus.groovy.ast.AnnotationNode, org.codehaus.groovy.ast.ClassNode)</a></span> - Method in <a href="org/grails/datastor [...]
 </dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#WEB_APPLICATION_CONTEXT_CLASS_NAME" title="Field in AbstractDatastoreInitializer">WEB_APPLICATION_CONTEXT_CLASS_NAME</a></span> - Field in <a href="org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html">AbstractDatastoreInitializer</a>
+</dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="grails/gorm/services/Where.html" title="Annotation Type in grails.gorm.services">Where</a></span> - Annotation Type in <a href="./grails/gorm/services/package-summary.html">grails.gorm.services</a>
 </dt><dd><div class="block">Allow specifying the where query to execute</div></dd>
 <dt><span class="strong"><a href="org/grails/datastore/gorm/query/criteria/AbstractDetachedCriteria.html#where(groovy.lang.Closure)" title="Method in AbstractDetachedCriteria">where(groovy.lang.Closure)</a></span> - Method in <a href="org/grails/datastore/gorm/query/criteria/AbstractDetachedCriteria.html">AbstractDetachedCriteria</a>
diff --git a/docs/snapshot/grails-data/api/org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html b/docs/snapshot/grails-data/api/org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html
index f708299b58c..868066c036f 100644
--- a/docs/snapshot/grails-data/api/org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html
+++ b/docs/snapshot/grails-data/api/org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html
@@ -187,12 +187,18 @@ implements <a href='../../../../../org.springframework.context.ResourceLoaderAwa
                         </tr>
                         
                         <tr class="rowColor">
+                            <td class="colFirst"><code><strong>static&nbsp;java.lang.String</strong></code>&nbsp;</td>
+                            <td class="colLast"><code><a href="#WEB_APPLICATION_CONTEXT_CLASS_NAME">WEB_APPLICATION_CONTEXT_CLASS_NAME</a></code></td>
+                            <td class="colLast"></td>
+                        </tr>
+                        
+                        <tr class="altColor">
                             <td class="colFirst"><code><strong>protected&nbsp;java.lang.ClassLoader</strong></code>&nbsp;</td>
                             <td class="colLast"><code><a href="#classLoader">classLoader</a></code></td>
                             <td class="colLast"></td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code><strong>protected&nbsp;boolean</strong></code>&nbsp;</td>
                             <td class="colLast"><code><a href="#secondaryDatastore">secondaryDatastore</a></code></td>
                             <td class="colLast"></td>
@@ -426,24 +432,30 @@ implements <a href='../../../../../org.springframework.context.ResourceLoaderAwa
                         </tr>
                         
                         <tr class="altColor">
+                            <td class="colFirst"><code></code></td>
+                            <td class="colLast"><code>protected&nbsp;boolean</code></td>
+                            <td class="colLast"><code><strong><a href="#isWebApplicationRegistry(org.springframework.beans.factory.support.BeanDefinitionRegistry)">isWebApplicationRegistry</a></strong>(<a href='../../../../../org.springframework.beans.factory.support.BeanDefinitionRegistry.html'>BeanDefinitionRegistry</a> registry)</code><br>Determines whether the given registry belongs to a web application. </td>
+                        </tr>
+                        
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>protected&nbsp;java.util.Map&lt;java.lang.String, java.lang.Class&lt;?&gt;&gt;</code></td>
                             <td class="colLast"><code><strong><a href="#loadDataServices(java.lang.String)">loadDataServices</a></strong>(java.lang.String secondaryDatastore)</code><br></td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>protected&nbsp;void</code></td>
                             <td class="colLast"><code><strong><a href="#scanForPersistentClasses()">scanForPersistentClasses</a></strong>()</code><br></td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>void</code></td>
                             <td class="colLast"><code><strong><a href="#setResourceLoader(org.springframework.core.io.ResourceLoader)">setResourceLoader</a></strong>(<a href='../../../../../org.springframework.core.io.ResourceLoader.html'>ResourceLoader</a> resourceLoader)</code><br></td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>void</code></td>
                             <td class="colLast"><code><strong><a href="#setSecondaryDatastore(boolean)">setSecondaryDatastore</a></strong>(boolean secondaryDatastore)</code><br>Whether this datastore is secondary to another primary datastore (example the SQL DB)</td>
@@ -514,6 +526,14 @@ implements <a href='../../../../../org.springframework.context.ResourceLoaderAwa
                             </li>
                         </ul>
                     
+                        <a name="WEB_APPLICATION_CONTEXT_CLASS_NAME"><!-- --></a>
+                        <ul class="blockListLast">
+                            <li class="blockList">
+                                <h4>public&nbsp;static&nbsp;final&nbsp;java.lang.String <strong>WEB_APPLICATION_CONTEXT_CLASS_NAME</strong></h4>
+                                <p></p>
+                            </li>
+                        </ul>
+                    
                         <a name="classLoader"><!-- --></a>
                         <ul class="blockListLast">
                             <li class="blockList">
@@ -809,6 +829,17 @@ implements <a href='../../../../../org.springframework.context.ResourceLoaderAwa
                             </li>
                         </ul>
                     
+                        <a name="isWebApplicationRegistry(org.springframework.beans.factory.support.BeanDefinitionRegistry)"><!-- --></a>
+                        <ul class="blockListLast">
+                            <li class="blockList">
+                                <h4>protected&nbsp;boolean <strong>isWebApplicationRegistry</strong>(<a href='../../../../../org.springframework.beans.factory.support.BeanDefinitionRegistry.html'>BeanDefinitionRegistry</a> registry)</h4>
+                                <p> Determines whether the given registry belongs to a web application. The presence of the
+ <CODE>dispatcherServlet</CODE> bean definition is only a reliable signal after Spring Boot
+ auto-configuration has been processed; Grails plugin bean definitions register before
+ that, so the type of the registry (the web application context itself) is checked as well. <DL><DT><B>Parameters:</B></DT><DD><code>registry</code> -  The bean definition registry</DD></DL><DL><DT><B>Returns:</B></DT><DD>true if the registry belongs to a web application</DD></DL></p>
+                            </li>
+                        </ul>
+                    
                         <a name="loadDataServices(java.lang.String)"><!-- --></a>
                         <ul class="blockListLast">
                             <li class="blockList">
diff --git a/docs/snapshot/grails-data/hibernate5/api/grails/mongodb/bootstrap/MongoDbDataStoreSpringInitializer.html b/docs/snapshot/grails-data/hibernate5/api/grails/mongodb/bootstrap/MongoDbDataStoreSpringInitializer.html
index 795504b3f14..871dfd60106 100644
--- a/docs/snapshot/grails-data/hibernate5/api/grails/mongodb/bootstrap/MongoDbDataStoreSpringInitializer.html
+++ b/docs/snapshot/grails-data/hibernate5/api/grails/mongodb/bootstrap/MongoDbDataStoreSpringInitializer.html
@@ -195,7 +195,7 @@ extends <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreI
                         </tr>
                                                 <tr class="altColor">
                             <td class="colFirst"><strong><code>class <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html'>AbstractDatastoreInitializer</a></code></strong></td>
-                            <td class="colLast"><code><a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#ENTITY_CLASS_RESOURCE_PATTERN'>ENTITY_CLASS_RESOURCE_PATTERN</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#OSIV_CLASS_NAME'>OSIV_CLASS_NAME</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#TRANSACTION_MANAGER_BEAN'>TRANSACTION_MANAGER_BEAN</a>, <a href='../.. [...]
+                            <td class="colLast"><code><a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#ENTITY_CLASS_RESOURCE_PATTERN'>ENTITY_CLASS_RESOURCE_PATTERN</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#OSIV_CLASS_NAME'>OSIV_CLASS_NAME</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#TRANSACTION_MANAGER_BEAN'>TRANSACTION_MANAGER_BEAN</a>, <a href='../.. [...]
                         </tr>
 
                     </table>
@@ -345,7 +345,7 @@ extends <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreI
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html'>AbstractDatastoreInitializer</a></code></td>
-                            <td class="colLast"><code><a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#collectMappedClasses(java.lang.String)'>collectMappedClasses</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#configure()'>configure</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#configureForBeanDefinitionRegistry(org.springframework.beans.factory.support.Bea [...]
+                            <td class="colLast"><code><a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#collectMappedClasses(java.lang.String)'>collectMappedClasses</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#configure()'>configure</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#configureForBeanDefinitionRegistry(org.springframework.beans.factory.support.Bea [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/grails-data/hibernate5/api/grails/orm/bootstrap/HibernateDatastoreSpringInitializer.html b/docs/snapshot/grails-data/hibernate5/api/grails/orm/bootstrap/HibernateDatastoreSpringInitializer.html
index 2fc8f08dcc8..492e827eafb 100644
--- a/docs/snapshot/grails-data/hibernate5/api/grails/orm/bootstrap/HibernateDatastoreSpringInitializer.html
+++ b/docs/snapshot/grails-data/hibernate5/api/grails/orm/bootstrap/HibernateDatastoreSpringInitializer.html
@@ -170,7 +170,7 @@ extends <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreI
                         </tr>
                                                 <tr class="altColor">
                             <td class="colFirst"><strong><code>class <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html'>AbstractDatastoreInitializer</a></code></strong></td>
-                            <td class="colLast"><code><a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#ENTITY_CLASS_RESOURCE_PATTERN'>ENTITY_CLASS_RESOURCE_PATTERN</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#OSIV_CLASS_NAME'>OSIV_CLASS_NAME</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#TRANSACTION_MANAGER_BEAN'>TRANSACTION_MANAGER_BEAN</a>, <a href='../.. [...]
+                            <td class="colLast"><code><a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#ENTITY_CLASS_RESOURCE_PATTERN'>ENTITY_CLASS_RESOURCE_PATTERN</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#OSIV_CLASS_NAME'>OSIV_CLASS_NAME</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#TRANSACTION_MANAGER_BEAN'>TRANSACTION_MANAGER_BEAN</a>, <a href='../.. [...]
                         </tr>
 
                     </table>
@@ -361,7 +361,7 @@ extends <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreI
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html'>AbstractDatastoreInitializer</a></code></td>
-                            <td class="colLast"><code><a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#collectMappedClasses(java.lang.String)'>collectMappedClasses</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#configure()'>configure</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#configureForBeanDefinitionRegistry(org.springframework.beans.factory.support.Bea [...]
+                            <td class="colLast"><code><a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#collectMappedClasses(java.lang.String)'>collectMappedClasses</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#configure()'>configure</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#configureForBeanDefinitionRegistry(org.springframework.beans.factory.support.Bea [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/grails-data/hibernate5/api/grails/plugin/hibernate/HibernateGrailsPlugin.html b/docs/snapshot/grails-data/hibernate5/api/grails/plugin/hibernate/HibernateGrailsPlugin.html
index e82e777f456..e808187a53c 100644
--- a/docs/snapshot/grails-data/hibernate5/api/grails/plugin/hibernate/HibernateGrailsPlugin.html
+++ b/docs/snapshot/grails-data/hibernate5/api/grails/plugin/hibernate/HibernateGrailsPlugin.html
@@ -322,7 +322,7 @@ extends grails.plugins.Plugin</pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class grails.plugins.Plugin</code></td>
-                            <td class="colLast"><code>grails.plugins.Plugin#beans(groovy.lang.Closure), grails.plugins.Plugin#doWithApplicationContext(), grails.plugins.Plugin#doWithDynamicMethods(), grails.plugins.Plugin#doWithSpring(), grails.plugins.Plugin#equals(java.lang.Object), grails.plugins.Plugin#getApplicationContext(), grails.plugins.Plugin#getArtefacts(), grails.plugins.Plugin#getClass(), grails.plugins.Plugin#getConfig(), grails.plugins.Plugin#getEnvironment(), grails.plugi [...]
+                            <td class="colLast"><code>grails.plugins.Plugin#beanRegistrar(), grails.plugins.Plugin#beans(groovy.lang.Closure), grails.plugins.Plugin#doWithApplicationContext(), grails.plugins.Plugin#doWithDynamicMethods(), grails.plugins.Plugin#doWithSpring(), grails.plugins.Plugin#doWithSpring(grails.spring.BeanBuilder), grails.plugins.Plugin#equals(java.lang.Object), grails.plugins.Plugin#getApplicationContext(), grails.plugins.Plugin#getArtefacts(), grails.plugins.Plug [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/grails-data/hibernate5/api/grails/plugins/mongodb/MongodbGrailsPlugin.html b/docs/snapshot/grails-data/hibernate5/api/grails/plugins/mongodb/MongodbGrailsPlugin.html
index 4745fa096dd..76ea245be37 100644
--- a/docs/snapshot/grails-data/hibernate5/api/grails/plugins/mongodb/MongodbGrailsPlugin.html
+++ b/docs/snapshot/grails-data/hibernate5/api/grails/plugins/mongodb/MongodbGrailsPlugin.html
@@ -284,7 +284,7 @@ extends grails.plugins.Plugin</pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class grails.plugins.Plugin</code></td>
-                            <td class="colLast"><code>grails.plugins.Plugin#beans(groovy.lang.Closure), grails.plugins.Plugin#doWithApplicationContext(), grails.plugins.Plugin#doWithDynamicMethods(), grails.plugins.Plugin#doWithSpring(), grails.plugins.Plugin#equals(java.lang.Object), grails.plugins.Plugin#getApplicationContext(), grails.plugins.Plugin#getArtefacts(), grails.plugins.Plugin#getClass(), grails.plugins.Plugin#getConfig(), grails.plugins.Plugin#getEnvironment(), grails.plugi [...]
+                            <td class="colLast"><code>grails.plugins.Plugin#beanRegistrar(), grails.plugins.Plugin#beans(groovy.lang.Closure), grails.plugins.Plugin#doWithApplicationContext(), grails.plugins.Plugin#doWithDynamicMethods(), grails.plugins.Plugin#doWithSpring(), grails.plugins.Plugin#doWithSpring(grails.spring.BeanBuilder), grails.plugins.Plugin#equals(java.lang.Object), grails.plugins.Plugin#getApplicationContext(), grails.plugins.Plugin#getArtefacts(), grails.plugins.Plug [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/grails-data/hibernate5/api/index-all.html b/docs/snapshot/grails-data/hibernate5/api/index-all.html
index cbdcd309356..ed057066dec 100644
--- a/docs/snapshot/grails-data/hibernate5/api/index-all.html
+++ b/docs/snapshot/grails-data/hibernate5/api/index-all.html
@@ -12098,6 +12098,8 @@ if (location.href.indexOf('is-external=true') == -1) {
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="org/grails/datastore/mapping/core/impl/PendingUpdateAdapter.html#isVetoed()" title="Method in PendingUpdateAdapter">isVetoed()</a></span> - Method in <a href="org/grails/datastore/mapping/core/impl/PendingUpdateAdapter.html">PendingUpdateAdapter</a>
 </dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#isWebApplicationRegistry(org.springframework.beans.factory.support.BeanDefinitionRegistry)" title="Method in AbstractDatastoreInitializer">isWebApplicationRegistry(org.springframework.beans.factory.support.BeanDefinitionRegistry)</a></span> - Method in <a href="org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html">AbstractDatastoreInitializer</a>
+</dt><dd> <div class="block">Determines whether the given registry belongs to a web application. </div></dd>
 <dt><span class="strong"><a href="org/grails/datastore/gorm/services/implementers/IterableInterfaceProjectionBuilder.html" title="Trait in org.grails.datastore.gorm.services.implementers">IterableInterfaceProjectionBuilder</a></span> - Trait in <a href="./org/grails/datastore/gorm/services/implementers/package-summary.html">org.grails.datastore.gorm.services.implementers</a>
 </dt><dd><div class="block">Projection builder for iterable results like lists and arrays</div></dd>
 <dt><span class="strong"><a href="org/grails/datastore/gorm/services/implementers/IterableProjectionServiceImplementer.html" title="Interface in org.grails.datastore.gorm.services.implementers">IterableProjectionServiceImplementer</a></span> - Interface in <a href="./org/grails/datastore/gorm/services/implementers/package-summary.html">org.grails.datastore.gorm.services.implementers</a>
@@ -19147,6 +19149,8 @@ if (location.href.indexOf('is-external=true') == -1) {
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="org/grails/datastore/gorm/transactions/transform/TransactionalTransform.html#weaveTransactionManagerAware(org.codehaus.groovy.control.SourceUnit, org.codehaus.groovy.ast.AnnotationNode, org.codehaus.groovy.ast.ClassNode)" title="Method in TransactionalTransform">weaveTransactionManagerAware(org.codehaus.groovy.control.SourceUnit, org.codehaus.groovy.ast.AnnotationNode, org.codehaus.groovy.ast.ClassNode)</a></span> - Method in <a href="org/grails/datastor [...]
 </dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#WEB_APPLICATION_CONTEXT_CLASS_NAME" title="Field in AbstractDatastoreInitializer">WEB_APPLICATION_CONTEXT_CLASS_NAME</a></span> - Field in <a href="org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html">AbstractDatastoreInitializer</a>
+</dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="grails/gorm/services/Where.html" title="Annotation Type in grails.gorm.services">Where</a></span> - Annotation Type in <a href="./grails/gorm/services/package-summary.html">grails.gorm.services</a>
 </dt><dd><div class="block">Allow specifying the where query to execute</div></dd>
 <dt><span class="strong"><a href="org/grails/datastore/gorm/query/criteria/AbstractDetachedCriteria.html#where(groovy.lang.Closure)" title="Method in AbstractDetachedCriteria">where(groovy.lang.Closure)</a></span> - Method in <a href="org/grails/datastore/gorm/query/criteria/AbstractDetachedCriteria.html">AbstractDetachedCriteria</a>
diff --git a/docs/snapshot/grails-data/hibernate5/api/org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html b/docs/snapshot/grails-data/hibernate5/api/org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html
index cb0790e0f78..09cbac3baa9 100644
--- a/docs/snapshot/grails-data/hibernate5/api/org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html
+++ b/docs/snapshot/grails-data/hibernate5/api/org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html
@@ -187,12 +187,18 @@ implements org.springframework.context.ResourceLoaderAware</pre>
                         </tr>
                         
                         <tr class="rowColor">
+                            <td class="colFirst"><code><strong>static&nbsp;java.lang.String</strong></code>&nbsp;</td>
+                            <td class="colLast"><code><a href="#WEB_APPLICATION_CONTEXT_CLASS_NAME">WEB_APPLICATION_CONTEXT_CLASS_NAME</a></code></td>
+                            <td class="colLast"></td>
+                        </tr>
+                        
+                        <tr class="altColor">
                             <td class="colFirst"><code><strong>protected&nbsp;java.lang.ClassLoader</strong></code>&nbsp;</td>
                             <td class="colLast"><code><a href="#classLoader">classLoader</a></code></td>
                             <td class="colLast"></td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code><strong>protected&nbsp;boolean</strong></code>&nbsp;</td>
                             <td class="colLast"><code><a href="#secondaryDatastore">secondaryDatastore</a></code></td>
                             <td class="colLast"></td>
@@ -426,24 +432,30 @@ implements org.springframework.context.ResourceLoaderAware</pre>
                         </tr>
                         
                         <tr class="altColor">
+                            <td class="colFirst"><code></code></td>
+                            <td class="colLast"><code>protected&nbsp;boolean</code></td>
+                            <td class="colLast"><code><strong><a href="#isWebApplicationRegistry(org.springframework.beans.factory.support.BeanDefinitionRegistry)">isWebApplicationRegistry</a></strong>(org.springframework.beans.factory.support.BeanDefinitionRegistry registry)</code><br>Determines whether the given registry belongs to a web application. </td>
+                        </tr>
+                        
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>protected&nbsp;java.util.Map&lt;java.lang.String, java.lang.Class&lt;?&gt;&gt;</code></td>
                             <td class="colLast"><code><strong><a href="#loadDataServices(java.lang.String)">loadDataServices</a></strong>(java.lang.String secondaryDatastore)</code><br></td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>protected&nbsp;void</code></td>
                             <td class="colLast"><code><strong><a href="#scanForPersistentClasses()">scanForPersistentClasses</a></strong>()</code><br></td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>void</code></td>
                             <td class="colLast"><code><strong><a href="#setResourceLoader(org.springframework.core.io.ResourceLoader)">setResourceLoader</a></strong>(org.springframework.core.io.ResourceLoader resourceLoader)</code><br></td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>void</code></td>
                             <td class="colLast"><code><strong><a href="#setSecondaryDatastore(boolean)">setSecondaryDatastore</a></strong>(boolean secondaryDatastore)</code><br>Whether this datastore is secondary to another primary datastore (example the SQL DB)</td>
@@ -514,6 +526,14 @@ implements org.springframework.context.ResourceLoaderAware</pre>
                             </li>
                         </ul>
                     
+                        <a name="WEB_APPLICATION_CONTEXT_CLASS_NAME"><!-- --></a>
+                        <ul class="blockListLast">
+                            <li class="blockList">
+                                <h4>public&nbsp;static&nbsp;final&nbsp;java.lang.String <strong>WEB_APPLICATION_CONTEXT_CLASS_NAME</strong></h4>
+                                <p></p>
+                            </li>
+                        </ul>
+                    
                         <a name="classLoader"><!-- --></a>
                         <ul class="blockListLast">
                             <li class="blockList">
@@ -809,6 +829,17 @@ implements org.springframework.context.ResourceLoaderAware</pre>
                             </li>
                         </ul>
                     
+                        <a name="isWebApplicationRegistry(org.springframework.beans.factory.support.BeanDefinitionRegistry)"><!-- --></a>
+                        <ul class="blockListLast">
+                            <li class="blockList">
+                                <h4>protected&nbsp;boolean <strong>isWebApplicationRegistry</strong>(org.springframework.beans.factory.support.BeanDefinitionRegistry registry)</h4>
+                                <p> Determines whether the given registry belongs to a web application. The presence of the
+ <CODE>dispatcherServlet</CODE> bean definition is only a reliable signal after Spring Boot
+ auto-configuration has been processed; Grails plugin bean definitions register before
+ that, so the type of the registry (the web application context itself) is checked as well. <DL><DT><B>Parameters:</B></DT><DD><code>registry</code> -  The bean definition registry</DD></DL><DL><DT><B>Returns:</B></DT><DD>true if the registry belongs to a web application</DD></DL></p>
+                            </li>
+                        </ul>
+                    
                         <a name="loadDataServices(java.lang.String)"><!-- --></a>
                         <ul class="blockListLast">
                             <li class="blockList">
diff --git a/docs/snapshot/grails-data/hibernate5/api/org/grails/gorm/graphql/plugin/GormGraphqlGrailsPlugin.html b/docs/snapshot/grails-data/hibernate5/api/org/grails/gorm/graphql/plugin/GormGraphqlGrailsPlugin.html
index bc0f3e7344c..c1f284bad5f 100644
--- a/docs/snapshot/grails-data/hibernate5/api/org/grails/gorm/graphql/plugin/GormGraphqlGrailsPlugin.html
+++ b/docs/snapshot/grails-data/hibernate5/api/org/grails/gorm/graphql/plugin/GormGraphqlGrailsPlugin.html
@@ -288,7 +288,7 @@ extends grails.plugins.Plugin</pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class grails.plugins.Plugin</code></td>
-                            <td class="colLast"><code>grails.plugins.Plugin#beans(groovy.lang.Closure), grails.plugins.Plugin#doWithApplicationContext(), grails.plugins.Plugin#doWithDynamicMethods(), grails.plugins.Plugin#doWithSpring(), grails.plugins.Plugin#equals(java.lang.Object), grails.plugins.Plugin#getApplicationContext(), grails.plugins.Plugin#getArtefacts(), grails.plugins.Plugin#getClass(), grails.plugins.Plugin#getConfig(), grails.plugins.Plugin#getEnvironment(), grails.plugi [...]
+                            <td class="colLast"><code>grails.plugins.Plugin#beanRegistrar(), grails.plugins.Plugin#beans(groovy.lang.Closure), grails.plugins.Plugin#doWithApplicationContext(), grails.plugins.Plugin#doWithDynamicMethods(), grails.plugins.Plugin#doWithSpring(), grails.plugins.Plugin#doWithSpring(grails.spring.BeanBuilder), grails.plugins.Plugin#equals(java.lang.Object), grails.plugins.Plugin#getApplicationContext(), grails.plugins.Plugin#getArtefacts(), grails.plugins.Plug [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/grails-data/hibernate5/api/org/grails/plugins/databasemigration/DatabaseMigrationGrailsPlugin.html b/docs/snapshot/grails-data/hibernate5/api/org/grails/plugins/databasemigration/DatabaseMigrationGrailsPlugin.html
index c4134dd517d..cc3c134d688 100644
--- a/docs/snapshot/grails-data/hibernate5/api/org/grails/plugins/databasemigration/DatabaseMigrationGrailsPlugin.html
+++ b/docs/snapshot/grails-data/hibernate5/api/org/grails/plugins/databasemigration/DatabaseMigrationGrailsPlugin.html
@@ -290,7 +290,7 @@ extends grails.plugins.Plugin</pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class grails.plugins.Plugin</code></td>
-                            <td class="colLast"><code>grails.plugins.Plugin#beans(groovy.lang.Closure), grails.plugins.Plugin#doWithApplicationContext(), grails.plugins.Plugin#doWithDynamicMethods(), grails.plugins.Plugin#doWithSpring(), grails.plugins.Plugin#equals(java.lang.Object), grails.plugins.Plugin#getApplicationContext(), grails.plugins.Plugin#getArtefacts(), grails.plugins.Plugin#getClass(), grails.plugins.Plugin#getConfig(), grails.plugins.Plugin#getEnvironment(), grails.plugi [...]
+                            <td class="colLast"><code>grails.plugins.Plugin#beanRegistrar(), grails.plugins.Plugin#beans(groovy.lang.Closure), grails.plugins.Plugin#doWithApplicationContext(), grails.plugins.Plugin#doWithDynamicMethods(), grails.plugins.Plugin#doWithSpring(), grails.plugins.Plugin#doWithSpring(grails.spring.BeanBuilder), grails.plugins.Plugin#equals(java.lang.Object), grails.plugins.Plugin#getApplicationContext(), grails.plugins.Plugin#getArtefacts(), grails.plugins.Plug [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/grails-data/hibernate7/api/grails/mongodb/bootstrap/MongoDbDataStoreSpringInitializer.html b/docs/snapshot/grails-data/hibernate7/api/grails/mongodb/bootstrap/MongoDbDataStoreSpringInitializer.html
index aed77dddb44..f0bb5e9d85a 100644
--- a/docs/snapshot/grails-data/hibernate7/api/grails/mongodb/bootstrap/MongoDbDataStoreSpringInitializer.html
+++ b/docs/snapshot/grails-data/hibernate7/api/grails/mongodb/bootstrap/MongoDbDataStoreSpringInitializer.html
@@ -195,7 +195,7 @@ extends <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreI
                         </tr>
                                                 <tr class="altColor">
                             <td class="colFirst"><strong><code>class <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html'>AbstractDatastoreInitializer</a></code></strong></td>
-                            <td class="colLast"><code><a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#ENTITY_CLASS_RESOURCE_PATTERN'>ENTITY_CLASS_RESOURCE_PATTERN</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#OSIV_CLASS_NAME'>OSIV_CLASS_NAME</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#TRANSACTION_MANAGER_BEAN'>TRANSACTION_MANAGER_BEAN</a>, <a href='../.. [...]
+                            <td class="colLast"><code><a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#ENTITY_CLASS_RESOURCE_PATTERN'>ENTITY_CLASS_RESOURCE_PATTERN</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#OSIV_CLASS_NAME'>OSIV_CLASS_NAME</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#TRANSACTION_MANAGER_BEAN'>TRANSACTION_MANAGER_BEAN</a>, <a href='../.. [...]
                         </tr>
 
                     </table>
@@ -345,7 +345,7 @@ extends <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreI
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html'>AbstractDatastoreInitializer</a></code></td>
-                            <td class="colLast"><code><a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#collectMappedClasses(java.lang.String)'>collectMappedClasses</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#configure()'>configure</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#configureForBeanDefinitionRegistry(org.springframework.beans.factory.support.Bea [...]
+                            <td class="colLast"><code><a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#collectMappedClasses(java.lang.String)'>collectMappedClasses</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#configure()'>configure</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#configureForBeanDefinitionRegistry(org.springframework.beans.factory.support.Bea [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/grails-data/hibernate7/api/grails/orm/bootstrap/HibernateDatastoreSpringInitializer.html b/docs/snapshot/grails-data/hibernate7/api/grails/orm/bootstrap/HibernateDatastoreSpringInitializer.html
index dde7346f8e2..da8004391c1 100644
--- a/docs/snapshot/grails-data/hibernate7/api/grails/orm/bootstrap/HibernateDatastoreSpringInitializer.html
+++ b/docs/snapshot/grails-data/hibernate7/api/grails/orm/bootstrap/HibernateDatastoreSpringInitializer.html
@@ -170,7 +170,7 @@ extends <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreI
                         </tr>
                                                 <tr class="altColor">
                             <td class="colFirst"><strong><code>class <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html'>AbstractDatastoreInitializer</a></code></strong></td>
-                            <td class="colLast"><code><a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#ENTITY_CLASS_RESOURCE_PATTERN'>ENTITY_CLASS_RESOURCE_PATTERN</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#OSIV_CLASS_NAME'>OSIV_CLASS_NAME</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#TRANSACTION_MANAGER_BEAN'>TRANSACTION_MANAGER_BEAN</a>, <a href='../.. [...]
+                            <td class="colLast"><code><a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#ENTITY_CLASS_RESOURCE_PATTERN'>ENTITY_CLASS_RESOURCE_PATTERN</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#OSIV_CLASS_NAME'>OSIV_CLASS_NAME</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#TRANSACTION_MANAGER_BEAN'>TRANSACTION_MANAGER_BEAN</a>, <a href='../.. [...]
                         </tr>
 
                     </table>
@@ -361,7 +361,7 @@ extends <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreI
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html'>AbstractDatastoreInitializer</a></code></td>
-                            <td class="colLast"><code><a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#collectMappedClasses(java.lang.String)'>collectMappedClasses</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#configure()'>configure</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#configureForBeanDefinitionRegistry(org.springframework.beans.factory.support.Bea [...]
+                            <td class="colLast"><code><a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#collectMappedClasses(java.lang.String)'>collectMappedClasses</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#configure()'>configure</a>, <a href='../../../org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#configureForBeanDefinitionRegistry(org.springframework.beans.factory.support.Bea [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/grails-data/hibernate7/api/grails/plugin/hibernate/HibernateGrailsPlugin.html b/docs/snapshot/grails-data/hibernate7/api/grails/plugin/hibernate/HibernateGrailsPlugin.html
index 05d89e5469a..b1cf47977c3 100644
--- a/docs/snapshot/grails-data/hibernate7/api/grails/plugin/hibernate/HibernateGrailsPlugin.html
+++ b/docs/snapshot/grails-data/hibernate7/api/grails/plugin/hibernate/HibernateGrailsPlugin.html
@@ -322,7 +322,7 @@ extends grails.plugins.Plugin</pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class grails.plugins.Plugin</code></td>
-                            <td class="colLast"><code>grails.plugins.Plugin#beans(groovy.lang.Closure), grails.plugins.Plugin#doWithApplicationContext(), grails.plugins.Plugin#doWithDynamicMethods(), grails.plugins.Plugin#doWithSpring(), grails.plugins.Plugin#equals(java.lang.Object), grails.plugins.Plugin#getApplicationContext(), grails.plugins.Plugin#getArtefacts(), grails.plugins.Plugin#getClass(), grails.plugins.Plugin#getConfig(), grails.plugins.Plugin#getEnvironment(), grails.plugi [...]
+                            <td class="colLast"><code>grails.plugins.Plugin#beanRegistrar(), grails.plugins.Plugin#beans(groovy.lang.Closure), grails.plugins.Plugin#doWithApplicationContext(), grails.plugins.Plugin#doWithDynamicMethods(), grails.plugins.Plugin#doWithSpring(), grails.plugins.Plugin#doWithSpring(grails.spring.BeanBuilder), grails.plugins.Plugin#equals(java.lang.Object), grails.plugins.Plugin#getApplicationContext(), grails.plugins.Plugin#getArtefacts(), grails.plugins.Plug [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/grails-data/hibernate7/api/grails/plugins/mongodb/MongodbGrailsPlugin.html b/docs/snapshot/grails-data/hibernate7/api/grails/plugins/mongodb/MongodbGrailsPlugin.html
index e70d9dc979e..c47795812dd 100644
--- a/docs/snapshot/grails-data/hibernate7/api/grails/plugins/mongodb/MongodbGrailsPlugin.html
+++ b/docs/snapshot/grails-data/hibernate7/api/grails/plugins/mongodb/MongodbGrailsPlugin.html
@@ -284,7 +284,7 @@ extends grails.plugins.Plugin</pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class grails.plugins.Plugin</code></td>
-                            <td class="colLast"><code>grails.plugins.Plugin#beans(groovy.lang.Closure), grails.plugins.Plugin#doWithApplicationContext(), grails.plugins.Plugin#doWithDynamicMethods(), grails.plugins.Plugin#doWithSpring(), grails.plugins.Plugin#equals(java.lang.Object), grails.plugins.Plugin#getApplicationContext(), grails.plugins.Plugin#getArtefacts(), grails.plugins.Plugin#getClass(), grails.plugins.Plugin#getConfig(), grails.plugins.Plugin#getEnvironment(), grails.plugi [...]
+                            <td class="colLast"><code>grails.plugins.Plugin#beanRegistrar(), grails.plugins.Plugin#beans(groovy.lang.Closure), grails.plugins.Plugin#doWithApplicationContext(), grails.plugins.Plugin#doWithDynamicMethods(), grails.plugins.Plugin#doWithSpring(), grails.plugins.Plugin#doWithSpring(grails.spring.BeanBuilder), grails.plugins.Plugin#equals(java.lang.Object), grails.plugins.Plugin#getApplicationContext(), grails.plugins.Plugin#getArtefacts(), grails.plugins.Plug [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/grails-data/hibernate7/api/index-all.html b/docs/snapshot/grails-data/hibernate7/api/index-all.html
index 6ba4fcf451e..37ec01c65f2 100644
--- a/docs/snapshot/grails-data/hibernate7/api/index-all.html
+++ b/docs/snapshot/grails-data/hibernate7/api/index-all.html
@@ -12098,6 +12098,8 @@ if (location.href.indexOf('is-external=true') == -1) {
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="org/grails/datastore/mapping/core/impl/PendingUpdateAdapter.html#isVetoed()" title="Method in PendingUpdateAdapter">isVetoed()</a></span> - Method in <a href="org/grails/datastore/mapping/core/impl/PendingUpdateAdapter.html">PendingUpdateAdapter</a>
 </dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#isWebApplicationRegistry(org.springframework.beans.factory.support.BeanDefinitionRegistry)" title="Method in AbstractDatastoreInitializer">isWebApplicationRegistry(org.springframework.beans.factory.support.BeanDefinitionRegistry)</a></span> - Method in <a href="org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html">AbstractDatastoreInitializer</a>
+</dt><dd> <div class="block">Determines whether the given registry belongs to a web application. </div></dd>
 <dt><span class="strong"><a href="org/grails/datastore/gorm/services/implementers/IterableInterfaceProjectionBuilder.html" title="Trait in org.grails.datastore.gorm.services.implementers">IterableInterfaceProjectionBuilder</a></span> - Trait in <a href="./org/grails/datastore/gorm/services/implementers/package-summary.html">org.grails.datastore.gorm.services.implementers</a>
 </dt><dd><div class="block">Projection builder for iterable results like lists and arrays</div></dd>
 <dt><span class="strong"><a href="org/grails/datastore/gorm/services/implementers/IterableProjectionServiceImplementer.html" title="Interface in org.grails.datastore.gorm.services.implementers">IterableProjectionServiceImplementer</a></span> - Interface in <a href="./org/grails/datastore/gorm/services/implementers/package-summary.html">org.grails.datastore.gorm.services.implementers</a>
@@ -19147,6 +19149,8 @@ if (location.href.indexOf('is-external=true') == -1) {
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="org/grails/datastore/gorm/transactions/transform/TransactionalTransform.html#weaveTransactionManagerAware(org.codehaus.groovy.control.SourceUnit, org.codehaus.groovy.ast.AnnotationNode, org.codehaus.groovy.ast.ClassNode)" title="Method in TransactionalTransform">weaveTransactionManagerAware(org.codehaus.groovy.control.SourceUnit, org.codehaus.groovy.ast.AnnotationNode, org.codehaus.groovy.ast.ClassNode)</a></span> - Method in <a href="org/grails/datastor [...]
 </dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#WEB_APPLICATION_CONTEXT_CLASS_NAME" title="Field in AbstractDatastoreInitializer">WEB_APPLICATION_CONTEXT_CLASS_NAME</a></span> - Field in <a href="org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html">AbstractDatastoreInitializer</a>
+</dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a href="grails/gorm/services/Where.html" title="Annotation Type in grails.gorm.services">Where</a></span> - Annotation Type in <a href="./grails/gorm/services/package-summary.html">grails.gorm.services</a>
 </dt><dd><div class="block">Allow specifying the where query to execute</div></dd>
 <dt><span class="strong"><a href="org/grails/datastore/gorm/query/criteria/AbstractDetachedCriteria.html#where(groovy.lang.Closure)" title="Method in AbstractDetachedCriteria">where(groovy.lang.Closure)</a></span> - Method in <a href="org/grails/datastore/gorm/query/criteria/AbstractDetachedCriteria.html">AbstractDetachedCriteria</a>
diff --git a/docs/snapshot/grails-data/hibernate7/api/org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html b/docs/snapshot/grails-data/hibernate7/api/org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html
index 8651f07b386..640910a8785 100644
--- a/docs/snapshot/grails-data/hibernate7/api/org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html
+++ b/docs/snapshot/grails-data/hibernate7/api/org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html
@@ -187,12 +187,18 @@ implements org.springframework.context.ResourceLoaderAware</pre>
                         </tr>
                         
                         <tr class="rowColor">
+                            <td class="colFirst"><code><strong>static&nbsp;java.lang.String</strong></code>&nbsp;</td>
+                            <td class="colLast"><code><a href="#WEB_APPLICATION_CONTEXT_CLASS_NAME">WEB_APPLICATION_CONTEXT_CLASS_NAME</a></code></td>
+                            <td class="colLast"></td>
+                        </tr>
+                        
+                        <tr class="altColor">
                             <td class="colFirst"><code><strong>protected&nbsp;java.lang.ClassLoader</strong></code>&nbsp;</td>
                             <td class="colLast"><code><a href="#classLoader">classLoader</a></code></td>
                             <td class="colLast"></td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code><strong>protected&nbsp;boolean</strong></code>&nbsp;</td>
                             <td class="colLast"><code><a href="#secondaryDatastore">secondaryDatastore</a></code></td>
                             <td class="colLast"></td>
@@ -426,24 +432,30 @@ implements org.springframework.context.ResourceLoaderAware</pre>
                         </tr>
                         
                         <tr class="altColor">
+                            <td class="colFirst"><code></code></td>
+                            <td class="colLast"><code>protected&nbsp;boolean</code></td>
+                            <td class="colLast"><code><strong><a href="#isWebApplicationRegistry(org.springframework.beans.factory.support.BeanDefinitionRegistry)">isWebApplicationRegistry</a></strong>(org.springframework.beans.factory.support.BeanDefinitionRegistry registry)</code><br>Determines whether the given registry belongs to a web application. </td>
+                        </tr>
+                        
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>protected&nbsp;java.util.Map&lt;java.lang.String, java.lang.Class&lt;?&gt;&gt;</code></td>
                             <td class="colLast"><code><strong><a href="#loadDataServices(java.lang.String)">loadDataServices</a></strong>(java.lang.String secondaryDatastore)</code><br></td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>protected&nbsp;void</code></td>
                             <td class="colLast"><code><strong><a href="#scanForPersistentClasses()">scanForPersistentClasses</a></strong>()</code><br></td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>void</code></td>
                             <td class="colLast"><code><strong><a href="#setResourceLoader(org.springframework.core.io.ResourceLoader)">setResourceLoader</a></strong>(org.springframework.core.io.ResourceLoader resourceLoader)</code><br></td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>void</code></td>
                             <td class="colLast"><code><strong><a href="#setSecondaryDatastore(boolean)">setSecondaryDatastore</a></strong>(boolean secondaryDatastore)</code><br>Whether this datastore is secondary to another primary datastore (example the SQL DB)</td>
@@ -514,6 +526,14 @@ implements org.springframework.context.ResourceLoaderAware</pre>
                             </li>
                         </ul>
                     
+                        <a name="WEB_APPLICATION_CONTEXT_CLASS_NAME"><!-- --></a>
+                        <ul class="blockListLast">
+                            <li class="blockList">
+                                <h4>public&nbsp;static&nbsp;final&nbsp;java.lang.String <strong>WEB_APPLICATION_CONTEXT_CLASS_NAME</strong></h4>
+                                <p></p>
+                            </li>
+                        </ul>
+                    
                         <a name="classLoader"><!-- --></a>
                         <ul class="blockListLast">
                             <li class="blockList">
@@ -809,6 +829,17 @@ implements org.springframework.context.ResourceLoaderAware</pre>
                             </li>
                         </ul>
                     
+                        <a name="isWebApplicationRegistry(org.springframework.beans.factory.support.BeanDefinitionRegistry)"><!-- --></a>
+                        <ul class="blockListLast">
+                            <li class="blockList">
+                                <h4>protected&nbsp;boolean <strong>isWebApplicationRegistry</strong>(org.springframework.beans.factory.support.BeanDefinitionRegistry registry)</h4>
+                                <p> Determines whether the given registry belongs to a web application. The presence of the
+ <CODE>dispatcherServlet</CODE> bean definition is only a reliable signal after Spring Boot
+ auto-configuration has been processed; Grails plugin bean definitions register before
+ that, so the type of the registry (the web application context itself) is checked as well. <DL><DT><B>Parameters:</B></DT><DD><code>registry</code> -  The bean definition registry</DD></DL><DL><DT><B>Returns:</B></DT><DD>true if the registry belongs to a web application</DD></DL></p>
+                            </li>
+                        </ul>
+                    
                         <a name="loadDataServices(java.lang.String)"><!-- --></a>
                         <ul class="blockListLast">
                             <li class="blockList">
diff --git a/docs/snapshot/grails-data/hibernate7/api/org/grails/gorm/graphql/plugin/GormGraphqlGrailsPlugin.html b/docs/snapshot/grails-data/hibernate7/api/org/grails/gorm/graphql/plugin/GormGraphqlGrailsPlugin.html
index 8100736d725..b2581b2f682 100644
--- a/docs/snapshot/grails-data/hibernate7/api/org/grails/gorm/graphql/plugin/GormGraphqlGrailsPlugin.html
+++ b/docs/snapshot/grails-data/hibernate7/api/org/grails/gorm/graphql/plugin/GormGraphqlGrailsPlugin.html
@@ -288,7 +288,7 @@ extends grails.plugins.Plugin</pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class grails.plugins.Plugin</code></td>
-                            <td class="colLast"><code>grails.plugins.Plugin#beans(groovy.lang.Closure), grails.plugins.Plugin#doWithApplicationContext(), grails.plugins.Plugin#doWithDynamicMethods(), grails.plugins.Plugin#doWithSpring(), grails.plugins.Plugin#equals(java.lang.Object), grails.plugins.Plugin#getApplicationContext(), grails.plugins.Plugin#getArtefacts(), grails.plugins.Plugin#getClass(), grails.plugins.Plugin#getConfig(), grails.plugins.Plugin#getEnvironment(), grails.plugi [...]
+                            <td class="colLast"><code>grails.plugins.Plugin#beanRegistrar(), grails.plugins.Plugin#beans(groovy.lang.Closure), grails.plugins.Plugin#doWithApplicationContext(), grails.plugins.Plugin#doWithDynamicMethods(), grails.plugins.Plugin#doWithSpring(), grails.plugins.Plugin#doWithSpring(grails.spring.BeanBuilder), grails.plugins.Plugin#equals(java.lang.Object), grails.plugins.Plugin#getApplicationContext(), grails.plugins.Plugin#getArtefacts(), grails.plugins.Plug [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/grails-data/hibernate7/api/org/grails/plugins/databasemigration/DatabaseMigrationGrailsPlugin.html b/docs/snapshot/grails-data/hibernate7/api/org/grails/plugins/databasemigration/DatabaseMigrationGrailsPlugin.html
index 8ab5e19c263..b2ada91f61e 100644
--- a/docs/snapshot/grails-data/hibernate7/api/org/grails/plugins/databasemigration/DatabaseMigrationGrailsPlugin.html
+++ b/docs/snapshot/grails-data/hibernate7/api/org/grails/plugins/databasemigration/DatabaseMigrationGrailsPlugin.html
@@ -290,7 +290,7 @@ extends grails.plugins.Plugin</pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class grails.plugins.Plugin</code></td>
-                            <td class="colLast"><code>grails.plugins.Plugin#beans(groovy.lang.Closure), grails.plugins.Plugin#doWithApplicationContext(), grails.plugins.Plugin#doWithDynamicMethods(), grails.plugins.Plugin#doWithSpring(), grails.plugins.Plugin#equals(java.lang.Object), grails.plugins.Plugin#getApplicationContext(), grails.plugins.Plugin#getArtefacts(), grails.plugins.Plugin#getClass(), grails.plugins.Plugin#getConfig(), grails.plugins.Plugin#getEnvironment(), grails.plugi [...]
+                            <td class="colLast"><code>grails.plugins.Plugin#beanRegistrar(), grails.plugins.Plugin#beans(groovy.lang.Closure), grails.plugins.Plugin#doWithApplicationContext(), grails.plugins.Plugin#doWithDynamicMethods(), grails.plugins.Plugin#doWithSpring(), grails.plugins.Plugin#doWithSpring(grails.spring.BeanBuilder), grails.plugins.Plugin#equals(java.lang.Object), grails.plugins.Plugin#getApplicationContext(), grails.plugins.Plugin#getArtefacts(), grails.plugins.Plug [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/grails-data/mongodb/api/grails/mongodb/bootstrap/MongoDbDataStoreSpringInitializer.html b/docs/snapshot/grails-data/mongodb/api/grails/mongodb/bootstrap/MongoDbDataStoreSpringInitializer.html
index b4bf8b7f55e..d9db47738e6 100644
--- a/docs/snapshot/grails-data/mongodb/api/grails/mongodb/bootstrap/MongoDbDataStoreSpringInitializer.html
+++ b/docs/snapshot/grails-data/mongodb/api/grails/mongodb/bootstrap/MongoDbDataStoreSpringInitializer.html
@@ -195,7 +195,7 @@ extends org.grails.datastore.gorm.bootstrap.AbstractDatastoreInitializer</pre>
                         </tr>
                                                 <tr class="altColor">
                             <td class="colFirst"><strong><code>class org.grails.datastore.gorm.bootstrap.AbstractDatastoreInitializer</code></strong></td>
-                            <td class="colLast"><code>TRANSACTION_MANAGER_BEAN, ENTITY_CLASS_RESOURCE_PATTERN, OSIV_CLASS_NAME, __$stMC</code></td>
+                            <td class="colLast"><code>TRANSACTION_MANAGER_BEAN, ENTITY_CLASS_RESOURCE_PATTERN, OSIV_CLASS_NAME, WEB_APPLICATION_CONTEXT_CLASS_NAME, __$stMC</code></td>
                         </tr>
 
                     </table>
diff --git a/docs/snapshot/grails-data/mongodb/api/grails/orm/bootstrap/HibernateDatastoreSpringInitializer.html b/docs/snapshot/grails-data/mongodb/api/grails/orm/bootstrap/HibernateDatastoreSpringInitializer.html
index 994b0c36845..a2e86e705a9 100644
--- a/docs/snapshot/grails-data/mongodb/api/grails/orm/bootstrap/HibernateDatastoreSpringInitializer.html
+++ b/docs/snapshot/grails-data/mongodb/api/grails/orm/bootstrap/HibernateDatastoreSpringInitializer.html
@@ -170,7 +170,7 @@ extends org.grails.datastore.gorm.bootstrap.AbstractDatastoreInitializer</pre>
                         </tr>
                                                 <tr class="altColor">
                             <td class="colFirst"><strong><code>class org.grails.datastore.gorm.bootstrap.AbstractDatastoreInitializer</code></strong></td>
-                            <td class="colLast"><code>TRANSACTION_MANAGER_BEAN, ENTITY_CLASS_RESOURCE_PATTERN, OSIV_CLASS_NAME, __$stMC</code></td>
+                            <td class="colLast"><code>TRANSACTION_MANAGER_BEAN, ENTITY_CLASS_RESOURCE_PATTERN, OSIV_CLASS_NAME, WEB_APPLICATION_CONTEXT_CLASS_NAME, __$stMC</code></td>
                         </tr>
 
                     </table>
diff --git a/docs/snapshot/grails-data/mongodb/api/grails/plugin/hibernate/HibernateGrailsPlugin.html b/docs/snapshot/grails-data/mongodb/api/grails/plugin/hibernate/HibernateGrailsPlugin.html
index 3d65ed3fd75..e8e7baf26b2 100644
--- a/docs/snapshot/grails-data/mongodb/api/grails/plugin/hibernate/HibernateGrailsPlugin.html
+++ b/docs/snapshot/grails-data/mongodb/api/grails/plugin/hibernate/HibernateGrailsPlugin.html
@@ -322,7 +322,7 @@ extends grails.plugins.Plugin</pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class grails.plugins.Plugin</code></td>
-                            <td class="colLast"><code>grails.plugins.Plugin#beans(groovy.lang.Closure), grails.plugins.Plugin#doWithApplicationContext(), grails.plugins.Plugin#doWithDynamicMethods(), grails.plugins.Plugin#doWithSpring(), grails.plugins.Plugin#equals(java.lang.Object), grails.plugins.Plugin#getApplicationContext(), grails.plugins.Plugin#getArtefacts(), grails.plugins.Plugin#getClass(), grails.plugins.Plugin#getConfig(), grails.plugins.Plugin#getEnvironment(), grails.plugi [...]
+                            <td class="colLast"><code>grails.plugins.Plugin#beanRegistrar(), grails.plugins.Plugin#beans(groovy.lang.Closure), grails.plugins.Plugin#doWithApplicationContext(), grails.plugins.Plugin#doWithDynamicMethods(), grails.plugins.Plugin#doWithSpring(), grails.plugins.Plugin#doWithSpring(grails.spring.BeanBuilder), grails.plugins.Plugin#equals(java.lang.Object), grails.plugins.Plugin#getApplicationContext(), grails.plugins.Plugin#getArtefacts(), grails.plugins.Plug [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/grails-data/mongodb/api/grails/plugins/mongodb/MongodbGrailsPlugin.html b/docs/snapshot/grails-data/mongodb/api/grails/plugins/mongodb/MongodbGrailsPlugin.html
index 2557073b312..010eda76885 100644
--- a/docs/snapshot/grails-data/mongodb/api/grails/plugins/mongodb/MongodbGrailsPlugin.html
+++ b/docs/snapshot/grails-data/mongodb/api/grails/plugins/mongodb/MongodbGrailsPlugin.html
@@ -284,7 +284,7 @@ extends grails.plugins.Plugin</pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class grails.plugins.Plugin</code></td>
-                            <td class="colLast"><code>grails.plugins.Plugin#beans(groovy.lang.Closure), grails.plugins.Plugin#doWithApplicationContext(), grails.plugins.Plugin#doWithDynamicMethods(), grails.plugins.Plugin#doWithSpring(), grails.plugins.Plugin#equals(java.lang.Object), grails.plugins.Plugin#getApplicationContext(), grails.plugins.Plugin#getArtefacts(), grails.plugins.Plugin#getClass(), grails.plugins.Plugin#getConfig(), grails.plugins.Plugin#getEnvironment(), grails.plugi [...]
+                            <td class="colLast"><code>grails.plugins.Plugin#beanRegistrar(), grails.plugins.Plugin#beans(groovy.lang.Closure), grails.plugins.Plugin#doWithApplicationContext(), grails.plugins.Plugin#doWithDynamicMethods(), grails.plugins.Plugin#doWithSpring(), grails.plugins.Plugin#doWithSpring(grails.spring.BeanBuilder), grails.plugins.Plugin#equals(java.lang.Object), grails.plugins.Plugin#getApplicationContext(), grails.plugins.Plugin#getArtefacts(), grails.plugins.Plug [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/grails-data/mongodb/api/org/grails/gorm/graphql/plugin/GormGraphqlGrailsPlugin.html b/docs/snapshot/grails-data/mongodb/api/org/grails/gorm/graphql/plugin/GormGraphqlGrailsPlugin.html
index f3de78c3df4..7029dd6ae94 100644
--- a/docs/snapshot/grails-data/mongodb/api/org/grails/gorm/graphql/plugin/GormGraphqlGrailsPlugin.html
+++ b/docs/snapshot/grails-data/mongodb/api/org/grails/gorm/graphql/plugin/GormGraphqlGrailsPlugin.html
@@ -288,7 +288,7 @@ extends grails.plugins.Plugin</pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class grails.plugins.Plugin</code></td>
-                            <td class="colLast"><code>grails.plugins.Plugin#beans(groovy.lang.Closure), grails.plugins.Plugin#doWithApplicationContext(), grails.plugins.Plugin#doWithDynamicMethods(), grails.plugins.Plugin#doWithSpring(), grails.plugins.Plugin#equals(java.lang.Object), grails.plugins.Plugin#getApplicationContext(), grails.plugins.Plugin#getArtefacts(), grails.plugins.Plugin#getClass(), grails.plugins.Plugin#getConfig(), grails.plugins.Plugin#getEnvironment(), grails.plugi [...]
+                            <td class="colLast"><code>grails.plugins.Plugin#beanRegistrar(), grails.plugins.Plugin#beans(groovy.lang.Closure), grails.plugins.Plugin#doWithApplicationContext(), grails.plugins.Plugin#doWithDynamicMethods(), grails.plugins.Plugin#doWithSpring(), grails.plugins.Plugin#doWithSpring(grails.spring.BeanBuilder), grails.plugins.Plugin#equals(java.lang.Object), grails.plugins.Plugin#getApplicationContext(), grails.plugins.Plugin#getArtefacts(), grails.plugins.Plug [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/grails-data/mongodb/api/org/grails/plugins/databasemigration/DatabaseMigrationGrailsPlugin.html b/docs/snapshot/grails-data/mongodb/api/org/grails/plugins/databasemigration/DatabaseMigrationGrailsPlugin.html
index fa0d86ebbef..fd8aac73e89 100644
--- a/docs/snapshot/grails-data/mongodb/api/org/grails/plugins/databasemigration/DatabaseMigrationGrailsPlugin.html
+++ b/docs/snapshot/grails-data/mongodb/api/org/grails/plugins/databasemigration/DatabaseMigrationGrailsPlugin.html
@@ -290,7 +290,7 @@ extends grails.plugins.Plugin</pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code>class grails.plugins.Plugin</code></td>
-                            <td class="colLast"><code>grails.plugins.Plugin#beans(groovy.lang.Closure), grails.plugins.Plugin#doWithApplicationContext(), grails.plugins.Plugin#doWithDynamicMethods(), grails.plugins.Plugin#doWithSpring(), grails.plugins.Plugin#equals(java.lang.Object), grails.plugins.Plugin#getApplicationContext(), grails.plugins.Plugin#getArtefacts(), grails.plugins.Plugin#getClass(), grails.plugins.Plugin#getConfig(), grails.plugins.Plugin#getEnvironment(), grails.plugi [...]
+                            <td class="colLast"><code>grails.plugins.Plugin#beanRegistrar(), grails.plugins.Plugin#beans(groovy.lang.Closure), grails.plugins.Plugin#doWithApplicationContext(), grails.plugins.Plugin#doWithDynamicMethods(), grails.plugins.Plugin#doWithSpring(), grails.plugins.Plugin#doWithSpring(grails.spring.BeanBuilder), grails.plugins.Plugin#equals(java.lang.Object), grails.plugins.Plugin#getApplicationContext(), grails.plugins.Plugin#getArtefacts(), grails.plugins.Plug [...]
                         </tr>
                     </table>
                    </ul>
diff --git a/docs/snapshot/guide/introduction.html b/docs/snapshot/guide/introduction.html
index 4acfc2818d8..cdfc3ebaf9d 100644
--- a/docs/snapshot/guide/introduction.html
+++ b/docs/snapshot/guide/introduction.html
@@ -330,6 +330,39 @@ This brings the Spring Boot 4 modular artifact layout, Spring Framework 7 API re
 </div>
 </div>
 <div class="sect3">
+<h4 id="_plugin_beans_register_before_spring_boot_auto_configuration">Plugin Beans Register Before Spring Boot Auto-Configuration</h4>
+<div class="paragraph">
+<p>Grails 8 unifies and retimes the plugin lifecycle so that the beans a plugin contributes are registered before Spring Boot processes its auto-configurations.
+A plugin bean now takes precedence over a Spring Boot default guarded by <code>@ConditionalOnMissingBean</code> — Boot backs off in favour of the plugin&#8217;s bean, with no need to override or remove it afterwards.</p>
+</div>
+<div class="paragraph">
+<p>Plugins register beans through the new <code>beanRegistrar()</code> hook, which returns a Spring Framework <a href="https://docs.spring.io/spring-framework/docs/7.0.8/javadoc-api/org/springframework/beans/factory/BeanRegistrar.html">BeanRegistrar</a>. Because <code>BeanRegistrar</code> is a functional interface, a closure coerced with <code>as BeanRegistrar</code> is all that is required:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="groovy"><span class="keyword">import</span> <span class="include">org.springframework.beans.factory.BeanRegistrar</span>
+<span class="keyword">import</span> <span class="include">org.springframework.beans.factory.BeanRegistry</span>
+<span class="keyword">import</span> <span class="include">org.springframework.core.env.Environment</span>
+<span class="keyword">import</span> <span class="include">grails.plugins.Plugin</span>
+
+<span class="type">class</span> <span class="class">MyGrailsPlugin</span> <span class="directive">extends</span> Plugin {
+
+    <span class="annotation">@Override</span>
+    BeanRegistrar beanRegistrar() {
+        { BeanRegistry registry, Environment environment -&gt;
+            registry.registerBean(<span class="string"><span class="delimiter">'</span><span class="content">myService</span><span class="delimiter">'</span></span>, MyServiceImpl)
+        } <span class="keyword">as</span> BeanRegistrar
+    }
+}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p><code>beanRegistrar()</code> replaces the <code>doWithSpring</code> bean builder DSL, which is deprecated in Grails 8.
+The DSL continues to work for now, but you are strongly urged to migrate.
+See the <a href="upgrading.html#upgrading80x">upgrade guide</a> for details.</p>
+</div>
+</div>
+<div class="sect3">
 <h4 id="_gsp_tag_library_improvements">GSP Tag Library Improvements</h4>
 <div class="paragraph">
 <p>Grails 8 continues the move toward method-based TagLib handlers while preserving compatibility with existing closure-based tags.
diff --git a/docs/snapshot/guide/plugins.html b/docs/snapshot/guide/plugins.html
index 85c1ab4efdc..beee71b2dae 100644
--- a/docs/snapshot/guide/plugins.html
+++ b/docs/snapshot/guide/plugins.html
@@ -1287,7 +1287,49 @@ If you have created a Grails plugin and want it to be listed on the <a href="htt
 <div class="sect3">
 <h4 id="_hooking_into_the_grails_spring_configuration">Hooking into the Grails Spring configuration</h4>
 <div class="paragraph">
-<p>First, you can hook in Grails runtime configuration overriding the <code>doWithSpring</code> method from the <a href="../api/grails/plugins/Plugin.html">Plugin</a> class and returning a closure that defines additional beans. For example the following snippet is from one of the core Grails plugins that provides <a href="i18n.html">i18n</a> support:</p>
+<p>The recommended way to register beans from a plugin is to override the <code>beanRegistrar</code> method from the <a href="../api/grails/plugins/Plugin.html">Plugin</a> class and return a Spring Framework <a href="https://docs.spring.io/spring-framework/docs/7.0.8/javadoc-api/org/springframework/beans/factory/BeanRegistrar.html">BeanRegistrar</a>. <code>BeanRegistrar</code> is a functional interface, so a closure coerced with <code>as BeanRegistrar</code> is all that is required — no  [...]
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="groovy"><span class="keyword">import</span> <span class="include">org.springframework.beans.factory.BeanRegistrar</span>
+<span class="keyword">import</span> <span class="include">org.springframework.beans.factory.BeanRegistry</span>
+<span class="keyword">import</span> <span class="include">org.springframework.core.env.Environment</span>
+<span class="keyword">import</span> <span class="include">org.springframework.web.servlet.i18n.CookieLocaleResolver</span>
+<span class="keyword">import</span> <span class="include">org.springframework.web.servlet.i18n.LocaleChangeInterceptor</span>
+<span class="keyword">import</span> <span class="include">org.springframework.context.support.ReloadableResourceBundleMessageSource</span>
+<span class="keyword">import</span> <span class="include">grails.plugins.Plugin</span>
+
+<span class="type">class</span> <span class="class">I18nGrailsPlugin</span> <span class="directive">extends</span> Plugin {
+
+    <span class="keyword">def</span> version = <span class="string"><span class="delimiter">&quot;</span><span class="content">0.1</span><span class="delimiter">&quot;</span></span>
+
+    <span class="annotation">@Override</span>
+    BeanRegistrar beanRegistrar() {
+        { BeanRegistry registry, Environment environment -&gt;
+            registry.registerBean(<span class="string"><span class="delimiter">'</span><span class="content">messageSource</span><span class="delimiter">'</span></span>, ReloadableResourceBundleMessageSource) { spec -&gt;
+                spec.supplier { context -&gt;
+                    <span class="keyword">new</span> ReloadableResourceBundleMessageSource(<span class="key">basename</span>: <span class="string"><span class="delimiter">'</span><span class="content">WEB-INF/grails-app/i18n/messages</span><span class="delimiter">'</span></span>)
+                }
+            }
+            registry.registerBean(<span class="string"><span class="delimiter">'</span><span class="content">localeChangeInterceptor</span><span class="delimiter">'</span></span>, LocaleChangeInterceptor) { spec -&gt;
+                spec.supplier { context -&gt;
+                    <span class="keyword">new</span> LocaleChangeInterceptor(<span class="key">paramName</span>: <span class="string"><span class="delimiter">'</span><span class="content">lang</span><span class="delimiter">'</span></span>)
+                }
+            }
+            registry.registerBean(<span class="string"><span class="delimiter">'</span><span class="content">localeResolver</span><span class="delimiter">'</span></span>, CookieLocaleResolver)
+        } <span class="keyword">as</span> BeanRegistrar
+    }
+}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>For more involved or reusable registration you can instead implement <code>BeanRegistrar</code> as its own class and return an instance of it from <code>beanRegistrar()</code>.</p>
+</div>
+<div class="paragraph">
+<p>Plugin beans are registered before Spring Boot processes its auto-configurations, so a bean registered here takes precedence over any Spring Boot default guarded by <code>@ConditionalOnMissingBean</code> — there is no need to override or remove Boot&#8217;s beans afterwards.</p>
+</div>
+<div class="paragraph">
+<p>Alternatively, plugins may override the <code>doWithSpring</code> method and return a closure that defines beans using the <a href="spring.html#theBeanBuilderDSLExplained">Spring Bean Builder</a> syntax:</p>
 </div>
 <div class="listingblock">
 <div class="content">
@@ -1312,8 +1354,48 @@ If you have created a Grails plugin and want it to be listed on the <a href="htt
 }</code></pre>
 </div>
 </div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<code>doWithSpring</code> is deprecated as of Grails 8 in favour of <code>beanRegistrar</code>. It continues to work — the beans it defines register at the same early point in the lifecycle — but new code should prefer the <code>BeanRegistrar</code> API.
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>Alternatively, you can override the <code>doWithSpring(BeanBuilder)</code> method and register beans directly against the supplied <code>BeanBuilder</code> instead of returning a closure. This avoids the closure indirection and is the recommended form for statically compiled plugins:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="groovy"><span class="keyword">import</span> <span class="include">org.springframework.web.servlet.i18n.CookieLocaleResolver</span>
+<span class="keyword">import</span> <span class="include">org.springframework.web.servlet.i18n.LocaleChangeInterceptor</span>
+<span class="keyword">import</span> <span class="include">org.springframework.context.support.ReloadableResourceBundleMessageSource</span>
+<span class="keyword">import</span> <span class="include">grails.plugins.*</span>
+<span class="keyword">import</span> <span class="include">grails.spring.BeanBuilder</span>
+
+<span class="type">class</span> <span class="class">I18nGrailsPlugin</span> <span class="directive">extends</span> Plugin {
+
+    <span class="keyword">def</span> version = <span class="string"><span class="delimiter">&quot;</span><span class="content">0.1</span><span class="delimiter">&quot;</span></span>
+
+    <span class="annotation">@Override</span>
+    <span class="type">void</span> doWithSpring(BeanBuilder beans) {
+        beans.messageSource(ReloadableResourceBundleMessageSource) {
+            basename = <span class="string"><span class="delimiter">&quot;</span><span class="content">WEB-INF/grails-app/i18n/messages</span><span class="delimiter">&quot;</span></span>
+        }
+        beans.localeChangeInterceptor(LocaleChangeInterceptor) {
+            paramName = <span class="string"><span class="delimiter">&quot;</span><span class="content">lang</span><span class="delimiter">&quot;</span></span>
+        }
+        beans.localeResolver(CookieLocaleResolver)
+    }
+}</code></pre>
+</div>
+</div>
 <div class="paragraph">
-<p>This plugin configures the Grails <code>messageSource</code> bean and a couple of other beans to manage Locale resolution and switching. It using the <a href="spring.html#theBeanBuilderDSLExplained">Spring Bean Builder</a> syntax to do so.</p>
+<p>A plugin may override either <code>doWithSpring()</code> or <code>doWithSpring(BeanBuilder)</code>, but not both. The closure-returning <code>doWithSpring()</code> remains fully supported for backwards compatibility. Defining both forms in the same plugin is an error: the plugin will fail to load with an exception, since the two forms are alternatives and defining both indicates an incomplete migration between them. Consolidate the bean definitions into a single form.</p>
 </div>
 </div>
 <div class="sect3">
diff --git a/docs/snapshot/guide/single.html b/docs/snapshot/guide/single.html
index b086e93348f..23c43fd71fd 100644
--- a/docs/snapshot/guide/single.html
+++ b/docs/snapshot/guide/single.html
@@ -931,6 +931,39 @@ This brings the Spring Boot 4 modular artifact layout, Spring Framework 7 API re
 </div>
 </div>
 <div class="sect3">
+<h4 id="_plugin_beans_register_before_spring_boot_auto_configuration">Plugin Beans Register Before Spring Boot Auto-Configuration</h4>
+<div class="paragraph">
+<p>Grails 8 unifies and retimes the plugin lifecycle so that the beans a plugin contributes are registered before Spring Boot processes its auto-configurations.
+A plugin bean now takes precedence over a Spring Boot default guarded by <code>@ConditionalOnMissingBean</code> — Boot backs off in favour of the plugin&#8217;s bean, with no need to override or remove it afterwards.</p>
+</div>
+<div class="paragraph">
+<p>Plugins register beans through the new <code>beanRegistrar()</code> hook, which returns a Spring Framework <a href="https://docs.spring.io/spring-framework/docs/7.0.8/javadoc-api/org/springframework/beans/factory/BeanRegistrar.html">BeanRegistrar</a>. Because <code>BeanRegistrar</code> is a functional interface, a closure coerced with <code>as BeanRegistrar</code> is all that is required:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="groovy"><span class="keyword">import</span> <span class="include">org.springframework.beans.factory.BeanRegistrar</span>
+<span class="keyword">import</span> <span class="include">org.springframework.beans.factory.BeanRegistry</span>
+<span class="keyword">import</span> <span class="include">org.springframework.core.env.Environment</span>
+<span class="keyword">import</span> <span class="include">grails.plugins.Plugin</span>
+
+<span class="type">class</span> <span class="class">MyGrailsPlugin</span> <span class="directive">extends</span> Plugin {
+
+    <span class="annotation">@Override</span>
+    BeanRegistrar beanRegistrar() {
+        { BeanRegistry registry, Environment environment -&gt;
+            registry.registerBean(<span class="string"><span class="delimiter">'</span><span class="content">myService</span><span class="delimiter">'</span></span>, MyServiceImpl)
+        } <span class="keyword">as</span> BeanRegistrar
+    }
+}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p><code>beanRegistrar()</code> replaces the <code>doWithSpring</code> bean builder DSL, which is deprecated in Grails 8.
+The DSL continues to work for now, but you are strongly urged to migrate.
+See the <a href="upgrading.html#upgrading80x">upgrade guide</a> for details.</p>
+</div>
+</div>
+<div class="sect3">
 <h4 id="_gsp_tag_library_improvements">GSP Tag Library Improvements</h4>
 <div class="paragraph">
 <p>Grails 8 continues the move toward method-based TagLib handlers while preserving compatibility with existing closure-based tags.
@@ -4569,13 +4602,105 @@ Now the framework bean simply backs off.</p>
 <i class="fa icon-note" title="Note"></i>
 </td>
 <td class="content">
-The back-off applies to beans that are registered before auto-configuration conditions are evaluated — <code>@Bean</code> methods in application configuration classes.
-Beans contributed later, through a plugin&#8217;s <code>doWithSpring</code> or the application&#8217;s <code>resources.groovy</code>, continue to take effect through bean-definition overriding, exactly as in previous releases.
+The clean back-off applies to beans that are registered before auto-configuration conditions are evaluated: <code>@Bean</code> methods in application configuration classes, and — as of the retimed plugin lifecycle (see <em>Plugin Beans Now Register Before Spring Boot Auto-Configuration</em> below) — beans contributed through a plugin&#8217;s <code>doWithSpring</code> or <code>beanRegistrar()</code>.
+Beans contributed through the application&#8217;s <code>resources.groovy</code> or <code>resources.xml</code> register later and continue to take effect through bean-definition overriding, exactly as in previous releases.
 </td>
 </tr>
 </table>
 </div>
 </div>
+<div class="sect3">
+<h4 id="_33_plugin_beans_now_register_before_spring_boot_auto_configuration">33. Plugin Beans Now Register Before Spring Boot Auto-Configuration</h4>
+<div class="paragraph">
+<p>In Grails 7 and earlier, the beans a plugin contributed through <code>doWithSpring</code> were registered <strong>after</strong> Spring Boot had processed its auto-configurations.
+A plugin that wanted to replace a Boot-provided bean therefore had to rely on bean-definition overriding, and Boot beans guarded by <code>@ConditionalOnMissingBean</code> never saw the plugin&#8217;s bean in time to back off.</p>
+</div>
+<div class="paragraph">
+<p>In Grails 8 the plugin lifecycle is unified and retimed: plugin bean definitions — both <code>doWithSpring</code> and the new <code>beanRegistrar()</code> hook — are drained into the bean definition registry <strong>before</strong> Spring Boot expands its auto-configurations. The practical effects are:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><strong>Plugin beans win <code>@ConditionalOnMissingBean</code> races.</strong> When a plugin registers a bean, a Boot auto-configuration bean of the same name or type that is guarded by <code>@ConditionalOnMissingBean</code> now backs off in favor of the plugin&#8217;s bean. Plugins no longer need to override or remove Boot&#8217;s defaults after the fact.</p>
+</li>
+<li>
+<p><strong>A single plugin manager and <code>GrailsApplication</code>.</strong> The plugin manager and the <code>grailsApplication</code> are built once, early in the context lifecycle, and reused for the rest of startup, so plugins are loaded by a single manager pass rather than a throwaway pass followed by the real one. <code>Holders.grailsApplication</code> is available earlier than before.</p>
+</li>
+<li>
+<p><strong>Artefact discovery happens earlier.</strong> Controllers, services, domain classes and other artefacts are discovered before plugin beans are registered, because core plugins iterate the application&#8217;s artefacts while defining beans. The set of discovered artefacts is unchanged — only the timing moved.</p>
+</li>
+<li>
+<p><strong>Side-effectful <code>doWithSpring</code> closures still run once</strong>, just earlier. Closures that read <code>grailsApplication.config</code> continue to work; the configuration is fully loaded (including plugin-contributed configuration) before any bean-definition code runs.</p>
+</li>
+<li>
+<p><strong>The application class is instantiated a second time during early artefact discovery.</strong> A throwaway instance is created solely to compute the application&#8217;s class scan; the real lifecycle bean is still created by Spring. An application-class constructor with side effects therefore runs twice per boot, so keep application-class constructors free of side effects.</p>
+</li>
+<li>
+<p><strong>Plugins that inspect the bean definition registry see a pre-auto-configuration registry.</strong> A <code>doWithSpring</code> closure that checks for the presence of a bean definition (for example <code>dispatcherServlet</code> as a "web application" signal) now runs before Spring Boot has registered its auto-configured beans, so such a check returns <code>false</code> where it previously returned <code>true</code>. Plugin code should test a registration-order-independent sign [...]
+</li>
+<li>
+<p><strong>The <code>annotationHandlerMapping</code> and <code>annotationHandlerAdapter</code> beans were removed.</strong> These duplicated the request-mapping infrastructure that Spring&#8217;s own MVC configuration already provides and were never consulted at runtime, but with plugin beans now registering first the bare duplicate adapter started shadowing Spring&#8217;s fully configured one. <code>@Controller</code> annotated beans continue to be handled by Spring Boot&#8217;s standar [...]
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p><strong>The bean builder DSL is deprecated.</strong> <code>doWithSpring()</code> on <code>GrailsApplicationLifeCycle</code> and <code>grails.plugins.Plugin</code> is deprecated as of Grails 8 — it continues to work, but the recommended way to register beans is the new <code>beanRegistrar()</code> hook, which returns a Spring Framework <code>org.springframework.beans.factory.BeanRegistrar</code>.</p>
+</div>
+<div class="paragraph">
+<p>Before (deprecated bean builder DSL):</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="groovy"><span class="keyword">import</span> <span class="include">grails.plugins.Plugin</span>
+
+<span class="type">class</span> <span class="class">MyGrailsPlugin</span> <span class="directive">extends</span> Plugin {
+
+    <span class="annotation">@Override</span>
+    Closure doWithSpring() {
+        { -&gt;
+            myService(MyServiceImpl) {
+                timeout = config.getProperty(<span class="string"><span class="delimiter">'</span><span class="content">myPlugin.timeout</span><span class="delimiter">'</span></span>, <span class="predefined-type">Integer</span>, <span class="integer">30</span>)
+            }
+        }
+    }
+}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>After (Spring <code>BeanRegistrar</code>). <code>BeanRegistrar</code> is a functional interface, so a closure coerced with <code>as BeanRegistrar</code> is all that is required — a separate class is optional and only worth it for more involved or reusable registration:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="groovy"><span class="keyword">import</span> <span class="include">grails.plugins.Plugin</span>
+<span class="keyword">import</span> <span class="include">org.springframework.beans.factory.BeanRegistrar</span>
+<span class="keyword">import</span> <span class="include">org.springframework.beans.factory.BeanRegistry</span>
+<span class="keyword">import</span> <span class="include">org.springframework.core.env.Environment</span>
+
+<span class="type">class</span> <span class="class">MyGrailsPlugin</span> <span class="directive">extends</span> Plugin {
+
+    <span class="annotation">@Override</span>
+    BeanRegistrar beanRegistrar() {
+        { BeanRegistry registry, Environment environment -&gt;
+            registry.registerBean(<span class="string"><span class="delimiter">'</span><span class="content">myService</span><span class="delimiter">'</span></span>, MyServiceImpl) { spec -&gt;
+                spec.supplier { context -&gt;
+                    <span class="keyword">new</span> MyServiceImpl(<span class="key">timeout</span>: environment.getProperty(<span class="string"><span class="delimiter">'</span><span class="content">myPlugin.timeout</span><span class="delimiter">'</span></span>, <span class="predefined-type">Integer</span>, <span class="integer">30</span>))
+                }
+            }
+        } <span class="keyword">as</span> BeanRegistrar
+    }
+}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Both hooks may be used on the same plugin during migration; when a registrar and the DSL register a bean under the same name, the registrar&#8217;s definition wins.</p>
+</div>
+<div class="paragraph">
+<p><strong>Bean-definition overriding edge case.</strong> Grails defaults <code>spring.main.allow-bean-definition-overriding</code> to <code>true</code>, and under that default nothing changes: an application bean (from the application class, <code>resources.groovy</code> or <code>resources.xml</code>) that uses the same name as a plugin bean still replaces the plugin&#8217;s bean. However, because plugin beans now register earlier and application beans register in a separate, later step [...]
+</div>
+<div class="paragraph">
+<p><strong>Most applications and plugins need no action.</strong> Behavior only changes where a plugin bean and a conditional Boot bean competed for the same name or type — the plugin bean now wins, which is almost always the intended outcome.</p>
+</div>
+</div>
 </div>
 
 
@@ -52979,7 +53104,49 @@ If you have created a Grails plugin and want it to be listed on the <a href="htt
 <div class="sect3">
 <h4 id="_hooking_into_the_grails_spring_configuration">Hooking into the Grails Spring configuration</h4>
 <div class="paragraph">
-<p>First, you can hook in Grails runtime configuration overriding the <code>doWithSpring</code> method from the <a href="../api/grails/plugins/Plugin.html">Plugin</a> class and returning a closure that defines additional beans. For example the following snippet is from one of the core Grails plugins that provides <a href="i18n.html">i18n</a> support:</p>
+<p>The recommended way to register beans from a plugin is to override the <code>beanRegistrar</code> method from the <a href="../api/grails/plugins/Plugin.html">Plugin</a> class and return a Spring Framework <a href="https://docs.spring.io/spring-framework/docs/7.0.8/javadoc-api/org/springframework/beans/factory/BeanRegistrar.html">BeanRegistrar</a>. <code>BeanRegistrar</code> is a functional interface, so a closure coerced with <code>as BeanRegistrar</code> is all that is required — no  [...]
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="groovy"><span class="keyword">import</span> <span class="include">org.springframework.beans.factory.BeanRegistrar</span>
+<span class="keyword">import</span> <span class="include">org.springframework.beans.factory.BeanRegistry</span>
+<span class="keyword">import</span> <span class="include">org.springframework.core.env.Environment</span>
+<span class="keyword">import</span> <span class="include">org.springframework.web.servlet.i18n.CookieLocaleResolver</span>
+<span class="keyword">import</span> <span class="include">org.springframework.web.servlet.i18n.LocaleChangeInterceptor</span>
+<span class="keyword">import</span> <span class="include">org.springframework.context.support.ReloadableResourceBundleMessageSource</span>
+<span class="keyword">import</span> <span class="include">grails.plugins.Plugin</span>
+
+<span class="type">class</span> <span class="class">I18nGrailsPlugin</span> <span class="directive">extends</span> Plugin {
+
+    <span class="keyword">def</span> version = <span class="string"><span class="delimiter">&quot;</span><span class="content">0.1</span><span class="delimiter">&quot;</span></span>
+
+    <span class="annotation">@Override</span>
+    BeanRegistrar beanRegistrar() {
+        { BeanRegistry registry, Environment environment -&gt;
+            registry.registerBean(<span class="string"><span class="delimiter">'</span><span class="content">messageSource</span><span class="delimiter">'</span></span>, ReloadableResourceBundleMessageSource) { spec -&gt;
+                spec.supplier { context -&gt;
+                    <span class="keyword">new</span> ReloadableResourceBundleMessageSource(<span class="key">basename</span>: <span class="string"><span class="delimiter">'</span><span class="content">WEB-INF/grails-app/i18n/messages</span><span class="delimiter">'</span></span>)
+                }
+            }
+            registry.registerBean(<span class="string"><span class="delimiter">'</span><span class="content">localeChangeInterceptor</span><span class="delimiter">'</span></span>, LocaleChangeInterceptor) { spec -&gt;
+                spec.supplier { context -&gt;
+                    <span class="keyword">new</span> LocaleChangeInterceptor(<span class="key">paramName</span>: <span class="string"><span class="delimiter">'</span><span class="content">lang</span><span class="delimiter">'</span></span>)
+                }
+            }
+            registry.registerBean(<span class="string"><span class="delimiter">'</span><span class="content">localeResolver</span><span class="delimiter">'</span></span>, CookieLocaleResolver)
+        } <span class="keyword">as</span> BeanRegistrar
+    }
+}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>For more involved or reusable registration you can instead implement <code>BeanRegistrar</code> as its own class and return an instance of it from <code>beanRegistrar()</code>.</p>
+</div>
+<div class="paragraph">
+<p>Plugin beans are registered before Spring Boot processes its auto-configurations, so a bean registered here takes precedence over any Spring Boot default guarded by <code>@ConditionalOnMissingBean</code> — there is no need to override or remove Boot&#8217;s beans afterwards.</p>
+</div>
+<div class="paragraph">
+<p>Alternatively, plugins may override the <code>doWithSpring</code> method and return a closure that defines beans using the <a href="spring.html#theBeanBuilderDSLExplained">Spring Bean Builder</a> syntax:</p>
 </div>
 <div class="listingblock">
 <div class="content">
@@ -53004,8 +53171,48 @@ If you have created a Grails plugin and want it to be listed on the <a href="htt
 }</code></pre>
 </div>
 </div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<code>doWithSpring</code> is deprecated as of Grails 8 in favour of <code>beanRegistrar</code>. It continues to work — the beans it defines register at the same early point in the lifecycle — but new code should prefer the <code>BeanRegistrar</code> API.
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>Alternatively, you can override the <code>doWithSpring(BeanBuilder)</code> method and register beans directly against the supplied <code>BeanBuilder</code> instead of returning a closure. This avoids the closure indirection and is the recommended form for statically compiled plugins:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="groovy"><span class="keyword">import</span> <span class="include">org.springframework.web.servlet.i18n.CookieLocaleResolver</span>
+<span class="keyword">import</span> <span class="include">org.springframework.web.servlet.i18n.LocaleChangeInterceptor</span>
+<span class="keyword">import</span> <span class="include">org.springframework.context.support.ReloadableResourceBundleMessageSource</span>
+<span class="keyword">import</span> <span class="include">grails.plugins.*</span>
+<span class="keyword">import</span> <span class="include">grails.spring.BeanBuilder</span>
+
+<span class="type">class</span> <span class="class">I18nGrailsPlugin</span> <span class="directive">extends</span> Plugin {
+
+    <span class="keyword">def</span> version = <span class="string"><span class="delimiter">&quot;</span><span class="content">0.1</span><span class="delimiter">&quot;</span></span>
+
+    <span class="annotation">@Override</span>
+    <span class="type">void</span> doWithSpring(BeanBuilder beans) {
+        beans.messageSource(ReloadableResourceBundleMessageSource) {
+            basename = <span class="string"><span class="delimiter">&quot;</span><span class="content">WEB-INF/grails-app/i18n/messages</span><span class="delimiter">&quot;</span></span>
+        }
+        beans.localeChangeInterceptor(LocaleChangeInterceptor) {
+            paramName = <span class="string"><span class="delimiter">&quot;</span><span class="content">lang</span><span class="delimiter">&quot;</span></span>
+        }
+        beans.localeResolver(CookieLocaleResolver)
+    }
+}</code></pre>
+</div>
+</div>
 <div class="paragraph">
-<p>This plugin configures the Grails <code>messageSource</code> bean and a couple of other beans to manage Locale resolution and switching. It using the <a href="spring.html#theBeanBuilderDSLExplained">Spring Bean Builder</a> syntax to do so.</p>
+<p>A plugin may override either <code>doWithSpring()</code> or <code>doWithSpring(BeanBuilder)</code>, but not both. The closure-returning <code>doWithSpring()</code> remains fully supported for backwards compatibility. Defining both forms in the same plugin is an error: the plugin will fail to load with an exception, since the two forms are alternatives and defining both indicates an incomplete migration between them. Consolidate the bean definitions into a single form.</p>
 </div>
 </div>
 <div class="sect3">
diff --git a/docs/snapshot/guide/upgrading.html b/docs/snapshot/guide/upgrading.html
index 6d2c51f4b8b..a0ba6efcf6a 100644
--- a/docs/snapshot/guide/upgrading.html
+++ b/docs/snapshot/guide/upgrading.html
@@ -2307,13 +2307,105 @@ Now the framework bean simply backs off.</p>
 <i class="fa icon-note" title="Note"></i>
 </td>
 <td class="content">
-The back-off applies to beans that are registered before auto-configuration conditions are evaluated — <code>@Bean</code> methods in application configuration classes.
-Beans contributed later, through a plugin&#8217;s <code>doWithSpring</code> or the application&#8217;s <code>resources.groovy</code>, continue to take effect through bean-definition overriding, exactly as in previous releases.
+The clean back-off applies to beans that are registered before auto-configuration conditions are evaluated: <code>@Bean</code> methods in application configuration classes, and — as of the retimed plugin lifecycle (see <em>Plugin Beans Now Register Before Spring Boot Auto-Configuration</em> below) — beans contributed through a plugin&#8217;s <code>doWithSpring</code> or <code>beanRegistrar()</code>.
+Beans contributed through the application&#8217;s <code>resources.groovy</code> or <code>resources.xml</code> register later and continue to take effect through bean-definition overriding, exactly as in previous releases.
 </td>
 </tr>
 </table>
 </div>
 </div>
+<div class="sect3">
+<h4 id="_33_plugin_beans_now_register_before_spring_boot_auto_configuration">33. Plugin Beans Now Register Before Spring Boot Auto-Configuration</h4>
+<div class="paragraph">
+<p>In Grails 7 and earlier, the beans a plugin contributed through <code>doWithSpring</code> were registered <strong>after</strong> Spring Boot had processed its auto-configurations.
+A plugin that wanted to replace a Boot-provided bean therefore had to rely on bean-definition overriding, and Boot beans guarded by <code>@ConditionalOnMissingBean</code> never saw the plugin&#8217;s bean in time to back off.</p>
+</div>
+<div class="paragraph">
+<p>In Grails 8 the plugin lifecycle is unified and retimed: plugin bean definitions — both <code>doWithSpring</code> and the new <code>beanRegistrar()</code> hook — are drained into the bean definition registry <strong>before</strong> Spring Boot expands its auto-configurations. The practical effects are:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><strong>Plugin beans win <code>@ConditionalOnMissingBean</code> races.</strong> When a plugin registers a bean, a Boot auto-configuration bean of the same name or type that is guarded by <code>@ConditionalOnMissingBean</code> now backs off in favor of the plugin&#8217;s bean. Plugins no longer need to override or remove Boot&#8217;s defaults after the fact.</p>
+</li>
+<li>
+<p><strong>A single plugin manager and <code>GrailsApplication</code>.</strong> The plugin manager and the <code>grailsApplication</code> are built once, early in the context lifecycle, and reused for the rest of startup, so plugins are loaded by a single manager pass rather than a throwaway pass followed by the real one. <code>Holders.grailsApplication</code> is available earlier than before.</p>
+</li>
+<li>
+<p><strong>Artefact discovery happens earlier.</strong> Controllers, services, domain classes and other artefacts are discovered before plugin beans are registered, because core plugins iterate the application&#8217;s artefacts while defining beans. The set of discovered artefacts is unchanged — only the timing moved.</p>
+</li>
+<li>
+<p><strong>Side-effectful <code>doWithSpring</code> closures still run once</strong>, just earlier. Closures that read <code>grailsApplication.config</code> continue to work; the configuration is fully loaded (including plugin-contributed configuration) before any bean-definition code runs.</p>
+</li>
+<li>
+<p><strong>The application class is instantiated a second time during early artefact discovery.</strong> A throwaway instance is created solely to compute the application&#8217;s class scan; the real lifecycle bean is still created by Spring. An application-class constructor with side effects therefore runs twice per boot, so keep application-class constructors free of side effects.</p>
+</li>
+<li>
+<p><strong>Plugins that inspect the bean definition registry see a pre-auto-configuration registry.</strong> A <code>doWithSpring</code> closure that checks for the presence of a bean definition (for example <code>dispatcherServlet</code> as a "web application" signal) now runs before Spring Boot has registered its auto-configured beans, so such a check returns <code>false</code> where it previously returned <code>true</code>. Plugin code should test a registration-order-independent sign [...]
+</li>
+<li>
+<p><strong>The <code>annotationHandlerMapping</code> and <code>annotationHandlerAdapter</code> beans were removed.</strong> These duplicated the request-mapping infrastructure that Spring&#8217;s own MVC configuration already provides and were never consulted at runtime, but with plugin beans now registering first the bare duplicate adapter started shadowing Spring&#8217;s fully configured one. <code>@Controller</code> annotated beans continue to be handled by Spring Boot&#8217;s standar [...]
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p><strong>The bean builder DSL is deprecated.</strong> <code>doWithSpring()</code> on <code>GrailsApplicationLifeCycle</code> and <code>grails.plugins.Plugin</code> is deprecated as of Grails 8 — it continues to work, but the recommended way to register beans is the new <code>beanRegistrar()</code> hook, which returns a Spring Framework <code>org.springframework.beans.factory.BeanRegistrar</code>.</p>
+</div>
+<div class="paragraph">
+<p>Before (deprecated bean builder DSL):</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="groovy"><span class="keyword">import</span> <span class="include">grails.plugins.Plugin</span>
+
+<span class="type">class</span> <span class="class">MyGrailsPlugin</span> <span class="directive">extends</span> Plugin {
+
+    <span class="annotation">@Override</span>
+    Closure doWithSpring() {
+        { -&gt;
+            myService(MyServiceImpl) {
+                timeout = config.getProperty(<span class="string"><span class="delimiter">'</span><span class="content">myPlugin.timeout</span><span class="delimiter">'</span></span>, <span class="predefined-type">Integer</span>, <span class="integer">30</span>)
+            }
+        }
+    }
+}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>After (Spring <code>BeanRegistrar</code>). <code>BeanRegistrar</code> is a functional interface, so a closure coerced with <code>as BeanRegistrar</code> is all that is required — a separate class is optional and only worth it for more involved or reusable registration:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="groovy"><span class="keyword">import</span> <span class="include">grails.plugins.Plugin</span>
+<span class="keyword">import</span> <span class="include">org.springframework.beans.factory.BeanRegistrar</span>
+<span class="keyword">import</span> <span class="include">org.springframework.beans.factory.BeanRegistry</span>
+<span class="keyword">import</span> <span class="include">org.springframework.core.env.Environment</span>
+
+<span class="type">class</span> <span class="class">MyGrailsPlugin</span> <span class="directive">extends</span> Plugin {
+
+    <span class="annotation">@Override</span>
+    BeanRegistrar beanRegistrar() {
+        { BeanRegistry registry, Environment environment -&gt;
+            registry.registerBean(<span class="string"><span class="delimiter">'</span><span class="content">myService</span><span class="delimiter">'</span></span>, MyServiceImpl) { spec -&gt;
+                spec.supplier { context -&gt;
+                    <span class="keyword">new</span> MyServiceImpl(<span class="key">timeout</span>: environment.getProperty(<span class="string"><span class="delimiter">'</span><span class="content">myPlugin.timeout</span><span class="delimiter">'</span></span>, <span class="predefined-type">Integer</span>, <span class="integer">30</span>))
+                }
+            }
+        } <span class="keyword">as</span> BeanRegistrar
+    }
+}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Both hooks may be used on the same plugin during migration; when a registrar and the DSL register a bean under the same name, the registrar&#8217;s definition wins.</p>
+</div>
+<div class="paragraph">
+<p><strong>Bean-definition overriding edge case.</strong> Grails defaults <code>spring.main.allow-bean-definition-overriding</code> to <code>true</code>, and under that default nothing changes: an application bean (from the application class, <code>resources.groovy</code> or <code>resources.xml</code>) that uses the same name as a plugin bean still replaces the plugin&#8217;s bean. However, because plugin beans now register earlier and application beans register in a separate, later step [...]
+</div>
+<div class="paragraph">
+<p><strong>Most applications and plugins need no action.</strong> Behavior only changes where a plugin bean and a conditional Boot bean competed for the same name or type — the plugin bean now wins, which is almost always the intended outcome.</p>
+</div>
+</div>
 </div>
 
 
diff --git a/docs/snapshot/ref/Versions/Grails BOM Hibernate5.html b/docs/snapshot/ref/Versions/Grails BOM Hibernate5.html
index adfda2b621f..cb48cbdec01 100644
--- a/docs/snapshot/ref/Versions/Grails BOM Hibernate5.html	
+++ b/docs/snapshot/ref/Versions/Grails BOM Hibernate5.html	
@@ -1564,9 +1564,9 @@ Companies deploy assistants like this [](https://kapa.ai) on docs via [website w
 <td class="tableblock halign-left valign-top"><p class="tableblock">170</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">commons-codec</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">commons-codec</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">1.21.0</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">1.22.0</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">${commons-codec.version}</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">spring-boot-dependencies</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">grails-hibernate5-bom</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">171</p></td>
@@ -15460,17 +15460,17 @@ Companies deploy assistants like this [](https://kapa.ai) on docs via [website w
 <td class="tableblock halign-left valign-top"><p class="tableblock">1907</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">tools.jackson.core</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">jackson-core</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">3.1.4</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">${jackson.version.core}</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">jackson-bom</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">3.1.5</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">${jackson3.version}</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">grails-hibernate5-bom</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">1908</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">tools.jackson.core</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">jackson-databind</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">3.1.4</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">${jackson.version.databind}</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">jackson-bom</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">3.1.5</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">${jackson3.version}</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">grails-hibernate5-bom</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">1909</p></td>
diff --git a/docs/snapshot/ref/Versions/Grails BOM Hibernate7.html b/docs/snapshot/ref/Versions/Grails BOM Hibernate7.html
index 57a780ae86b..b7ab64c8044 100644
--- a/docs/snapshot/ref/Versions/Grails BOM Hibernate7.html	
+++ b/docs/snapshot/ref/Versions/Grails BOM Hibernate7.html	
@@ -1564,9 +1564,9 @@ Companies deploy assistants like this [](https://kapa.ai) on docs via [website w
 <td class="tableblock halign-left valign-top"><p class="tableblock">170</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">commons-codec</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">commons-codec</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">1.21.0</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">1.22.0</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">${commons-codec.version}</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">spring-boot-dependencies</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">grails-hibernate7-bom</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">171</p></td>
@@ -15612,17 +15612,17 @@ Companies deploy assistants like this [](https://kapa.ai) on docs via [website w
 <td class="tableblock halign-left valign-top"><p class="tableblock">1926</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">tools.jackson.core</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">jackson-core</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">3.1.4</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">${jackson.version.core}</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">jackson-bom</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">3.1.5</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">${jackson3.version}</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">grails-hibernate7-bom</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">1927</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">tools.jackson.core</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">jackson-databind</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">3.1.4</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">${jackson.version.databind}</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">jackson-bom</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">3.1.5</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">${jackson3.version}</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">grails-hibernate7-bom</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">1928</p></td>
diff --git a/docs/snapshot/ref/Versions/Grails BOM.html b/docs/snapshot/ref/Versions/Grails BOM.html
index 2064a593696..a75a1bc397e 100644
--- a/docs/snapshot/ref/Versions/Grails BOM.html	
+++ b/docs/snapshot/ref/Versions/Grails BOM.html	
@@ -1573,9 +1573,9 @@ Variant BOMs are also available: <a href="Grails%20BOM%20Hibernate5.html">Grails
 <td class="tableblock halign-left valign-top"><p class="tableblock">170</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">commons-codec</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">commons-codec</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">1.21.0</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">1.22.0</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">${commons-codec.version}</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">spring-boot-dependencies</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">grails-bom</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">171</p></td>
@@ -15469,17 +15469,17 @@ Variant BOMs are also available: <a href="Grails%20BOM%20Hibernate5.html">Grails
 <td class="tableblock halign-left valign-top"><p class="tableblock">1907</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">tools.jackson.core</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">jackson-core</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">3.1.4</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">${jackson.version.core}</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">jackson-bom</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">3.1.5</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">${jackson3.version}</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">grails-bom</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">1908</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">tools.jackson.core</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">jackson-databind</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">3.1.4</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">${jackson.version.databind}</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">jackson-bom</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">3.1.5</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">${jackson3.version}</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">grails-bom</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">1909</p></td>