@Target(value=TYPE) @Retention(value=RUNTIME) @Documented @Import(value={EnableBroadleafRootAutoConfiguration.BroadleafRootAutoConfiguration.class,EnableBroadleafServletAutoConfiguration.BroadleafServletAutoConfiguration.class,EnableBroadleafAutoConfiguration.BroadleafAutoConfigurationOverrides.class}) public @interface EnableBroadleafAutoConfiguration
Broadleaf is progressing towards the Spring Framework's methodology of bean definition and priority. The following are the different phases Broadleaf will progress through with this goal in mind.
Phase 1 (current) - Broadleaf framework XML configuration is separated out into site and admin
specific directories within /blc-config in at least one module. For this reason, you must use EnableBroadleafAdminAutoConfiguration and EnableBroadleafSiteAutoConfiguration for admin and site
applications respectively.
Phase 2 - Medium level of effort - All Broadleaf modules have had ConditionalOnAdmin applied to admin specific beans and the XML
configuration files have been moved to just /blc-config. You can now use EnableBroadleafAutoConfiguration for both site and admin applications, however it isn't a requirement to migrate
EnableBroadleafAdminAutoConfiguration and EnableBroadleafSiteAutoConfiguration as they also include
root /blc-config in addition to the admin and site specific directories.
Phase 3 - Very high level of effort - All framework bean definitions in Broadleaf have been migrated to
JavaConfig or annotation based configuration and have applied a Spring Boot Autoconfiguration ConditionalOn... annotation that defines the condition on which it should be registered. The most common of these
will be ConditionalOnMissingBean which will check if a client application has registered a bean of this type,
and if so the framework bean won't get registered. Additionally all Broadleaf module configuration is bootstrapped
using spring.factories which references a Configuration
classes that contains Bean definitions and a ComponentScan of its entire package to pick up any other beans defined using
annotations. The Configuration classes referenced by spring.factories are discovered by using the Spring Boot Autoconfiguration EnableAutoConfiguration
annotation. Client applications will now be required to migrate to using EnableAutoConfiguration instead of
EnableBroadleafAutoConfiguration, although this annotation could be modified to compose EnableAutoConfiguration to mitigate this requirement. When modules are bootstrapped by EnableAutoConfiguration/spring.factories those bean definitions are placed in a deferred registration list
so they will get registered last, so by the time framework beans are evaluated for registration all client beans that
override framework beans have already been registered and the framework bean's ConditionalOnMissingBean
annotation will prevent it from getting registered and consequently overriding the client bean. Also, in order to
facilitate commercial framework modules overriding beans defined in community framework modules, the Order annotation is leveraged in commercial modules with a priority set higher
than the default Ordered.LOWEST_PRECEDENCE; this could be simplified by using
annotation composition on Order to create something like FrameworkPriority. At this phase there will be little to no XML configuration remaining in the Broadleaf Framework
as XML configuration does not support these conditionals. Also, the use of bean IDs will be severely reduced as they
generally aren't required for bean overriding decisions when using ConditionalOnMissingBean. Bean IDs will
still be used for the situations that Spring has defined such as having multiple DataSource beans
all with unique IDs and one marked as Primary for injections where a
Qualifier isn't specified.
Bootstraps Broadleaf configuration XML using a glob import.
This import utilizes the FrameworkXmlBeanDefinitionReader so that framework XML bean definitions will not
overwrite beans defined in a project.
EnableBroadleafAdminAutoConfiguration,
EnableBroadleafSiteAutoConfigurationCopyright © 2022. All rights reserved.