org.springframework.context.annotation.Bean |
Indicates that a method produces a bean to be managed by the Spring container. The
names and semantics of the attributes to this annotation are intentionally similar
to those of the <bean/>
element in the Spring XML schema.
Note that the @Bean
annotation does not provide attributes for scope,
primary or lazy. Rather, it should be used in conjunction with @Scope
,
@Primary
, and @Lazy
annotations to achieve
those semantics. The same annotations can also be used at the type level, e.g. for
component scanning.
While a #name() attribute is available, the default strategy for determining the name of a bean is to use the name of the Bean method. This is convenient and intuitive, but if explicit naming is desired, the #name() attribute may be used. Also note that #name() accepts an array of Strings. This is in order to allow for specifying multiple names (i.e., aliases) for a single bean.
The @Bean
annotation may be used on any methods in an @Component
class, in which case they will get processed in a configuration class 'lite' mode where
they will simply be called as plain factory methods from the container (similar to
factory-method
declarations in XML). The containing component classes remain
unmodified in this case, and there are no unusual constraints for factory methods.
As an advanced mode, @Bean
may also be used within @Configuration
component classes. In this case, bean methods may reference other @Bean
methods
on the same class by calling them directly. This ensures that references between beans
are strongly typed and navigable. Such so-called 'inter-bean references' are guaranteed to
respect scoping and AOP semantics, just like getBean
lookups would. These are
the semantics known from the original 'Spring JavaConfig' project which require CGLIB
subclassing of each such configuration class at runtime. As a consequence, configuration
classes and their factory methods must not be marked as final or private in this mode.
[Expand]
Inherited Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
From interface
java.lang.annotation.Annotation
|