Spring
- Bean Definition
The objects
that form the backbone of application and that are managed by the Spring IoC
container are called beans. A bean is an object that is instantiated, assembled
and managed by a Spring IoC container. These beans are created with the
configuration metadata that we supply to the container.
The
bean definition contains the information called configuration metadata which is needed for the container to
know the followings:
·
How
to create a bean
·
Bean's
lifecycle details
·
Bean's
dependencies
The above configuration metadata translates into a set of the following
properties that make up the bean definition.
class
The class attribute is mandatory. The class attribute specifies
the class of the bean to be constructed
id and name
Every bean has one or more ids
called identifiers, or names. These ids must be unique within the BeanFactory
or ApplicationContext the bean is hosted in. In an XmlBeanFactory, you use the id or name attributes
to specify the bean id.
singleton
or prototype
Beans are defined to be deployed in either singleton
or non-singleton mode. When a bean is a singleton, only
one shared instance of the bean will be managed and all requests for
beans with an id or ids matching that bean definition will result in that one
specific bean instance being returned.
The non-singleton or prototype mode of a bean
deployment results in the creation of a new bean instance every time
a request for that specific bean is done. This is ideal for situations where
for example each user needs an independent user object.
By default beans are deployed in singleton mode. By
changing the type to prototype, each request for a bean will create a new bean
object.
In the below example, two beans are declared of which
one is defined as a singleton, and the other one is a non-singleton
(prototype).
protoBean is created each and every time a client
asks the BeanFactory for this bean, while singleBean is only created
once; a reference to the exact same instance is returned on each request for
this bean.
constructor
arguments
This is used to inject the dependencies. Beans
define their dependencies only through constructor arguments, arguments to a
factory method, or properties which are set on the object instance after it has
been constructed. The container then inject
those
dependencies when it creates the bean.
Inversion of Control/Dependency Injection exists in
two major variants:
- setter-based dependency injection is realized by calling
setters on the beans after invoking a no-argument constructor or
no-argument static factory method to instantiate the bean.
- constructor-based dependency injection is
realized by invoking a constructor with a number of arguments, each
representing a collaborator or property.
bean
properties
Bean properties and constructor arguments can
be defined as either references to other managed beans or values defined
inline. The XmlBeanFactory
supports a number of sub-element types within its property and constructor-arg elements for this
purpose. This is
used to inject the dependencies.
autowiring
mode
It is possible to automatically let Spring
framework resolve dependencies for the bean by inspecting contents of the
BeanFactory. This is kown as Autowiring.
A BeanFactory is able to autowire relationships between collaborating
beans.
The autowiring functionality has five modes.
Autowiring is specified per bean and can thus be enabled for some beans,
while other beans won't be autowired.
Using autowiring, it is possible to reduce
or eliminate the need to specify properties or constructor arguments, saving a
significant amount of typing. In an XmlBeanFactory, the autowire mode for a
bean definition is specified by using the autowire attribute of the bean element.
Autowiring modes
No comments:
Post a Comment