The GitHub Actions job "End to End" on 
grails-core.git/fix/urlmappings-factory-bean-object-type-8.0.x has succeeded.
Run started by GitHub user codeconsole (triggered by codeconsole).

Head commit for run:
9a472722b0940aa9c7cedd2db5b96effd2606b56 / Scott Murphy Heiberg 
<[email protected]>
Declare what the url-mapping factory beans produce, so nothing is created to 
find out

In development, every message bundle contributed by a plugin, and every base 
name
an application configured itself, silently failed to resolve. Spring Boot's
messageSource was built with only the default base name, and nothing warned.

The produced type of a factory bean has to be answerable from the bean
definition, because a property value cannot be. Asked for the type of
grailsUrlMappingsHolder without it, Spring builds a constructor-only
ProxyFactoryBean - no property values applied, so no targetSource and no
proxyInterfaces - whose getObjectType() returns null, and then falls back to
creating the factory bean in full. That resolves the target source and the inner
UrlMappingsHolderFactoryBean, evaluates every mapping, reaches the constraints
machinery and its List<MessageSource> injection, and so creates Spring Boot's
message source - all while bean definition registry post processors are still
running. Anything created that early misses
ConfigurationPropertiesBindingPostProcessor, so MessageSourceProperties is never
bound and keeps its constructor defaults. Not just the base names: encoding,
cache-duration and fallback-to-system-locale are lost with it.

Only the reload branch built the proxy over an inner bean, so deployed
applications were unaffected and the whole of development was not.

Each factory-bean definition now declares its produced type through
FactoryBean.OBJECT_TYPE_ATTRIBUTE, which Spring consults before instantiating
anything. Reload mode is also switched off when running generated bean
definitions, since AOT code generation drops custom definition attributes and
hot-swapping mappings is meaningless in an image.

The regression test issues the eager by-type lookup directly against a bare
DefaultListableBeanFactory, so it reproduces with no Grails runtime and no
ordering luck: it asserts the holder is still found by type, and that nothing 
was
created in order to answer.

Report URL: https://github.com/apache/grails-core/actions/runs/32315879706

With regards,
GitHub Actions via GitBox

Reply via email to