Both @Component and @Named for the same bean class
Solution 1
@Component
and @Named
are annotations that basically do the same thing, but come from different APIs.
@Component
belongs to Spring API. It marks class to be autodetected as a bean and optionally allows you to specify a name for that bean (@Component("foo")
). Without explicit name specification detected bean will get a default name derived from the name of its class.
@Named
belongs to javax.inject
API. It marks class to be autodetected as a bean and requires you to specify a name.
Spring supports both these APIs. It doesn't make sense to use both annotations at the same class since they provide the same functionality.
See also:
Solution 2
Spring supports @Named
annotation (JSR-330) as an alternative to @Component
(Spring).
Generally, @Named
is poorly named since doesn't describe what it does, so I would prefer to use @Component
whenever I can.
TechSpellBound
Updated on February 01, 2020Comments
-
TechSpellBound over 4 years
Does a class which will act as a bean in a Spring application require both
@Component
and@Named
at the same time?What is the significance if both are used so?
I tried searching the net as well as saw the standard documentation of these annotations and found them a bit confusing.
Finally which name is taken by the application if the
@Named
annotation does not specify any name for the bean?