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 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 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 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 <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<?> 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 <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<?>[] 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 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 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: </li>
- Nested Field <li><a href="#constructor_summary">Constructor</a></li> <li><a href="#method_summary">Method</a></li>
+ Nested Field Constructor <li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li> | Detail: </li>
- Field <li><a href="#constructor_detail">Constructor</a></li> <li><a href="#method_detail">Method</a></li>
+ Field Constructor <li><a href="#method_detail">Method</a></li>
</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"> </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"> </span></caption>
- <tr>
- <th class="colFirst" scope="col">Constructor and description</th>
- </tr>
-
- <tr class="altColor">
- <td class="colFirst">
- <code>protected <strong><a href="#DevelopmentGrailsApplication(Class)">DevelopmentGrailsApplication</a></strong>(java.lang.Class<?>[] 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 java.lang.Object</code></td>
- <td class="colLast"><code><strong><a href="#configureApplicationContextClass()">configureApplicationContextClass</a></strong>()</code><br></td>
+ <td class="colLast"><code>static java.util.Collection<java.lang.Class></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 java.util.Collection<java.lang.Class></code></td>
+ <td class="colLast"><code><strong><a href="#scanApplicationClasses(Class)">scanApplicationClasses</a></strong>(java.lang.Class<?> 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 java.util.Collection<java.lang.Class></code></td>
+ <td class="colLast"><code><strong><a href="#scanApplicationClasses(Class, Collection)">scanApplicationClasses</a></strong>(java.lang.Class<?> applicationClass, java.util.Collection<java.lang.String> 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 <strong>DevelopmentGrailsApplication</strong>(java.lang.Class<?>[] 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 java.util.Collection<java.lang.Class> <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 java.util.Collection<java.lang.Class> <strong>scanApplicationClasses</strong>(java.lang.Class<?> 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 java.lang.Object <strong>configureApplicationContextClass</strong>()</h4>
- <p></p>
+ <h4>static java.util.Collection<java.lang.Class> <strong>scanApplicationClasses</strong>(java.lang.Class<?> applicationClass, java.util.Collection<java.lang.String> 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: </li>
- Nested Field <li><a href="#constructor_summary">Constructor</a></li> <li><a href="#method_summary">Method</a></li>
+ Nested Field Constructor <li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li> | Detail: </li>
- Field <li><a href="#constructor_detail">Constructor</a></li> <li><a href="#method_detail">Method</a></li>
+ Field Constructor <li><a href="#method_detail">Method</a></li>
</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 boolean</strong></code> </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 <a href='../../../grails/plugins/GrailsPluginManager.html'>GrailsPluginManager</a></strong></code> </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 final 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: </li>
- Nested Field <li><a href="#property_summary">Property</a></li> <li><a href="#constructor_summary">Constructor</a></li> <li><a href="#method_summary">Method</a></li>
+ Nested <li><a href="#field_summary">Field</a></li> <li><a href="#constructor_summary">Constructor</a></li> <li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li> | Detail: </li>
- Field <li><a href="#prop_detail">Property</a></li> <li><a href="#constructor_detail">Constructor</a></li> <li><a href="#method_detail">Method</a></li>
+ <li><a href="#field_detail">Field</a></li> <li><a href="#constructor_detail">Constructor</a></li> <li><a href="#method_detail">Method</a></li>
</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"> </span></caption>
+ <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Enum constants summary table">
+ <caption><span>Fields</span><span class="tabEnd"> </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"> </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> </td>
- <td class="colLast"><code><a href="#customizeGrailsApplicationClosure">customizeGrailsApplicationClosure</a></code><br></td>
+ <td class="colFirst"><code><strong>static java.lang.String</strong></code> </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> </td>
- <td class="colLast"><code><a href="#localOverride">localOverride</a></code><br></td>
+ <td class="colFirst"><code><strong>static java.lang.String</strong></code> </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"> </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 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 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 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 static final 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 static final 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 <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 void <strong>customizeGrailsApplication</strong>(<a href='../../../grails/core/GrailsApplication.html'>GrailsApplication</a> grailsApplication)</h4>
+ <h4>@java.lang.Override<br>public 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 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: </li>
- Nested Field <li><a href="#property_summary">Property</a></li> <li><a href="#constructor_summary">Constructor</a></li> <li><a href="#method_summary">Method</a></li>
+ Nested <li><a href="#field_summary">Field</a></li> <li><a href="#constructor_summary">Constructor</a></li> <li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li> | Detail: </li>
- Field <li><a href="#prop_detail">Property</a></li> <li><a href="#constructor_detail">Constructor</a></li> <li><a href="#method_detail">Method</a></li>
+ <li><a href="#field_detail">Field</a></li> <li><a href="#constructor_detail">Constructor</a></li> <li><a href="#method_detail">Method</a></li>
</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: </li>
- Nested Field <li><a href="#constructor_summary">Constructor</a></li> <li><a href="#method_summary">Method</a></li>
+ Nested Field Constructor <li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li> | Detail: </li>
- Field <li><a href="#constructor_detail">Constructor</a></li> <li><a href="#method_detail">Method</a></li>
+ Field Constructor <li><a href="#method_detail">Method</a></li>
</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"> </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"> </span></caption>
- <tr>
- <th class="colFirst" scope="col">Constructor and description</th>
- </tr>
-
- <tr class="altColor">
- <td class="colFirst">
- <code>protected <strong><a href="#DevelopmentGrailsApplication(Class)">DevelopmentGrailsApplication</a></strong>(java.lang.Class<?>[] 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 java.lang.Object</code></td>
- <td class="colLast"><code><strong><a href="#configureApplicationContextClass()">configureApplicationContextClass</a></strong>()</code><br></td>
+ <td class="colLast"><code>public 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 <strong>DevelopmentGrailsApplication</strong>(java.lang.Class<?>[] 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 java.lang.Object <strong>configureApplicationContextClass</strong>()</h4>
+ <h4>@java.lang.Override<br>public 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: </li>
- Nested Field <li><a href="#constructor_summary">Constructor</a></li> <li><a href="#method_summary">Method</a></li>
+ Nested Field Constructor <li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li> | Detail: </li>
- Field <li><a href="#constructor_detail">Constructor</a></li> <li><a href="#method_detail">Method</a></li>
+ Field Constructor <li><a href="#method_detail">Method</a></li>
</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 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 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 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 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 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 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 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 void</code></td>
<td class="colLast"><code><strong><a href="#onConfigChange(Map)">onConfigChange</a></strong>(java.util.Map<java.lang.String, java.lang.Object> 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 void</code></td>
<td class="colLast"><code><strong><a href="#onShutdown(Map)">onShutdown</a></strong>(java.util.Map<java.lang.String, java.lang.Object> 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 void</code></td>
<td class="colLast"><code><strong><a href="#onStartup(Map)">onStartup</a></strong>(java.util.Map<java.lang.String, java.lang.Object> 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 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 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 <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 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 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 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 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 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 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 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 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 <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 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 java.lang.Class<?></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 java.util.List<java.lang.String></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 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 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 PropertySource<?></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 java.lang.Class<?>[]</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 java.util.Collection<? extends TypeFilter></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 java.util.List<WatchPattern></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 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 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 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 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 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 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 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 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 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 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 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 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 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 <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<?>)</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<T>, 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<String>, Closure<Boolean>)</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<?>, Collection<String>)</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 java.lang.String</strong></code> </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 java.lang.ClassLoader</strong></code> </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 boolean</strong></code> </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 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 java.util.Map<java.lang.String, java.lang.Class<?>></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 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 static final 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 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 <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 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 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 <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 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 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 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 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 <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 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 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 <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 <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 <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 java.util.List<java.lang.String></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 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 java.lang.Class<?>[]</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 <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 java.util.Collection<? extends TypeFilter></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 java.util.List<<a href='../../../org/grails/plugins/support/WatchPattern.html' title='WatchPattern'>WatchPattern</a>></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 <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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 <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 java.lang.String</strong></code> </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 java.lang.ClassLoader</strong></code> </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 boolean</strong></code> </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 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 java.util.Map<java.lang.String, java.lang.Class<?>></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 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 static final 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 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 java.lang.String</strong></code> </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 java.lang.ClassLoader</strong></code> </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 boolean</strong></code> </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 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 java.util.Map<java.lang.String, java.lang.Class<?>></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 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 static final 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 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 java.lang.String</strong></code> </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 java.lang.ClassLoader</strong></code> </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 boolean</strong></code> </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 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 java.util.Map<java.lang.String, java.lang.Class<?>></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 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 static final 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 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’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 ->
+ 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">"</span><span class="content">0.1</span><span class="delimiter">"</span></span>
+
+ <span class="annotation">@Override</span>
+ BeanRegistrar beanRegistrar() {
+ { BeanRegistry registry, Environment environment ->
+ registry.registerBean(<span class="string"><span class="delimiter">'</span><span class="content">messageSource</span><span class="delimiter">'</span></span>, ReloadableResourceBundleMessageSource) { spec ->
+ spec.supplier { context ->
+ <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 ->
+ spec.supplier { context ->
+ <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’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">"</span><span class="content">0.1</span><span class="delimiter">"</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">"</span><span class="content">WEB-INF/grails-app/i18n/messages</span><span class="delimiter">"</span></span>
+ }
+ beans.localeChangeInterceptor(LocaleChangeInterceptor) {
+ paramName = <span class="string"><span class="delimiter">"</span><span class="content">lang</span><span class="delimiter">"</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’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 ->
+ 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’s <code>doWithSpring</code> or the application’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’s <code>doWithSpring</code> or <code>beanRegistrar()</code>.
+Beans contributed through the application’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’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’s bean. Plugins no longer need to override or remove Boot’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’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’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’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’s fully configured one. <code>@Controller</code> annotated beans continue to be handled by Spring Boot’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() {
+ { ->
+ 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 ->
+ registry.registerBean(<span class="string"><span class="delimiter">'</span><span class="content">myService</span><span class="delimiter">'</span></span>, MyServiceImpl) { spec ->
+ spec.supplier { context ->
+ <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’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’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">"</span><span class="content">0.1</span><span class="delimiter">"</span></span>
+
+ <span class="annotation">@Override</span>
+ BeanRegistrar beanRegistrar() {
+ { BeanRegistry registry, Environment environment ->
+ registry.registerBean(<span class="string"><span class="delimiter">'</span><span class="content">messageSource</span><span class="delimiter">'</span></span>, ReloadableResourceBundleMessageSource) { spec ->
+ spec.supplier { context ->
+ <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 ->
+ spec.supplier { context ->
+ <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’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">"</span><span class="content">0.1</span><span class="delimiter">"</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">"</span><span class="content">WEB-INF/grails-app/i18n/messages</span><span class="delimiter">"</span></span>
+ }
+ beans.localeChangeInterceptor(LocaleChangeInterceptor) {
+ paramName = <span class="string"><span class="delimiter">"</span><span class="content">lang</span><span class="delimiter">"</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’s <code>doWithSpring</code> or the application’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’s <code>doWithSpring</code> or <code>beanRegistrar()</code>.
+Beans contributed through the application’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’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’s bean. Plugins no longer need to override or remove Boot’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’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’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’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’s fully configured one. <code>@Controller</code> annotated beans continue to be handled by Spring Boot’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() {
+ { ->
+ 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 ->
+ registry.registerBean(<span class="string"><span class="delimiter">'</span><span class="content">myService</span><span class="delimiter">'</span></span>, MyServiceImpl) { spec ->
+ spec.supplier { context ->
+ <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’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’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>