Both @Component and @Named for the same bean class

2019-03-14 09:08发布

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?

3条回答
Deceive 欺骗
2楼-- · 2019-03-14 09:18

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.

查看更多
姐就是有狂的资本
3楼-- · 2019-03-14 09:19

Either of the both should be used. Using both @Component and @Named don't make any sense. Adding to above (Other's) comment @Component("[someComponentID]") and @Named("[someNamedID]") to assign an ID to a bean by passing the ID in the parenthesis, if not implicitly assigned one.

查看更多
Animai°情兽
4楼-- · 2019-03-14 09:39

@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:

查看更多
登录 后发表回答