007 標記註解@Controller
阿新 • • 發佈:2018-06-01
註冊 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