为什么在Controller注释中使用@Component

时间:2013-11-11 16:11:19

标签: java spring annotations spring-annotations

以下是For Component Interface

的源代码
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Component {

并且Spring Controller注释如下所示

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {

为什么在Controller注释中添加@Component?它的目的是什么?如果我删除此行怎么办?

我很清楚以下用于创建自定义注释的注释类型。

@Documented Whether to put the annotation in Javadocs
@Retention  When the annotation is needed
@Target     Places the annotation can go    
@Inherited  Whether subclasses get the annotation

2 个答案:

答案 0 :(得分:4)

@Controller@Component(就像@Service@Repository@Endpoint等。

@Component在这里用作元注释,以便可以使用组件扫描来拾取它。接下来,@ Controller是一个特殊组件,它将具有一些附加功能(Spring MVC负责这一点)。如果删除@Component注释组件,扫描将无法再检测到它。

您还可以通过创建自己的注释并在其上添加@Component来创建自己的基于@Component的注释。

答案 1 :(得分:1)

@Component是任何Spring管理组件的通用构造型。对于更具体的用例,@Repository@Service@Controller@Component的特化,例如,分别在持久性,服务和表示层中。

阅读this answer