Both @Component and @Named for the same bean class

53,855

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.

Share:
53,855
TechSpellBound
Author by

TechSpellBound

Updated on February 01, 2020

Comments

  • TechSpellBound
    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?