1. 程式人生 > >007 標記註解@Controller

007 標記註解@Controller

註冊 efault 控制 lin 文檔 spring pan 概述 看到了

一 .概述

  作為spring標準的四個基礎組件標示註解,@Controller變成了在springmvc中控制器的標示註解,到底是怎麽實現的呢?

  這個是我們需要了解的一個問題,本節,從源碼上說一下@Controller註解在springmvc之中的作用.


二 .註解的結構  

/** 含有該註解的類的隱含的意思就是該類應該是一個控制器.
 * Indicates that an annotated class is a "Controller" (e.g. a web controller).
 * 表示該註解的類可以被掃描器從classpath之中加載並註冊,另外一個作用就是
  完成處理器方法的綁定
* <p>This annotation serves as a specialization of {@link Component @Component}, * allowing for implementation classes to be autodetected through classpath scanning. * It is typically used in combination with annotated handler methods based on the * {@link org.springframework.web.bind.annotation.RequestMapping} annotation. *
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface Controller { /** * The value may indicate a suggestion for a logical component name, * to be turned into a Spring bean in case of an autodetected component. * @return the suggested component name, if any (or empty String otherwise)
*/ String value() default ""; }

我們從文檔之中,可以看到@Controller的一個特色作用就是完成處理器方法的綁定工作.


三 .@Controller的運行源碼  

    protected boolean isHandler(Class<?> beanType) {
        return (AnnotatedElementUtils.hasAnnotation(beanType, Controller.class) ||
                AnnotatedElementUtils.hasAnnotation(beanType, RequestMapping.class));
    }

我們在RequestMappingHandlerMapping之中看到了這一段代碼,

  它會判斷這個Bean是否是含有一個註解,如果有Controller,就是一個控制器.

  如果不是,含有@RequestMapping也是一個控制器.


四 .總結

  我們現在知道了,@Controller為什麽比其它的註解擁有更強的功能了

007 標記註解@Controller