@Retention(value=RUNTIME) @Target(value={TYPE,METHOD}) @Documented public @interface Profile
A profile is a named logical grouping that may be activated
programmatically via ConfigurableEnvironment.setActiveProfiles(java.lang.String...)
or declaratively
through setting the spring.profiles.active
property, usually through JVM system properties, as an
environment variable, or for web applications as a Servlet context parameter in
web.xml
.
The @Profile
annotation may be used in any of the following ways:
@Component
, including @Configuration
classes@Bean
methodIf a @Configuration
class is marked with @Profile
, all of the
@Bean
methods and @Import
annotations associated with that class
will be bypassed unless one or more of the specified profiles are active. This is very
similar to the behavior in Spring XML: if the profile
attribute of the
beans
element is supplied e.g., <beans profile="p1,p2">
, the
beans
element will not be parsed unless profiles 'p1' and/or 'p2' have been
activated. Likewise, if a @Component
or @Configuration
class is marked
with @Profile({"p1", "p2"})
, that class will not be registered/processed unless
profiles 'p1' and/or 'p2' have been activated.
If a given profile is prefixed with the NOT operator (!
), the annotated
will be registered if the profile is not active. e.g., for
@Profile({"p1", "!p2"})
, registration will occur if profile 'p1' is active or
if profile 'p2' is not active.
If the @Profile
annotation is omitted, registration will occur, regardless
of which (if any) profiles are active.
When defining Spring beans via XML, the "profile"
attribute of the
<beans>
element may be used. See the documentation in
spring-beans
XSD (version 3.1 or greater) for details.
ConfigurableEnvironment.setActiveProfiles(java.lang.String...)
,
ConfigurableEnvironment.setDefaultProfiles(java.lang.String...)
,
AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAME
,
AbstractEnvironment.DEFAULT_PROFILES_PROPERTY_NAME
public abstract String[] value