中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

關于Spring @RestController注解組合實現方法的案例分析

發布時間:2020-06-28 17:45:34 來源:億速云 閱讀:228 作者:清晨 欄目:開發技術

這篇文章主要介紹關于Spring @RestController注解組合實現方法的案例分析,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

Spring中存在很多注解組合的情況,例如@RestController

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {

	/**
	 * 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)
	 * @since 4.0.1
	 */
	@AliasFor(annotation = Controller.class)
	String value() default "";

}

@RestController就是@Controller、@ResponseBody兩個注解的組合,同時產生兩個注解的作用。

本人一開始以為這是Java的特性,Java能夠通過注解上的注解實現自動組合注解的效果。于是寫了這樣一段代碼

/**
 * @author Fcb
 * @date 2020/6/23
 * @description
 */
@Documented
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyComponent {
}
/**
 * @author Fcb
 * @date 2020/6/23
 * @description
 */
@Documented
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@MyComponent
public @interface MyController {
}
@MyController
public class AnnotatedService {
}

結果測試發現翻車

/**
 * @author Fcb
 * @date 2020/6/23
 * @description
 */
public class Test {

  public static void main(String[] args) {
    Annotation[] annotations = AnnotatedService.class.getAnnotations();
    for (Annotation anno : annotations) {
      System.out.println(anno.annotationType());
      System.out.println(anno.annotationType() == MyComponent.class);
    }
  }
}

打印結果如下:

interface com.example.demo.anno.MyController
false

經過本人查閱資料,發現我想要的那個注解組合注解的功能是Spring自己實現的。。通過Spring中的AnnotationUtils.findAnnotation(類,注解)方法來判斷某個類上是否能找到組合的注解。

比如現在我想知道AnnotatedService這個類上是否存在@MyComponent注解,畢竟這是我一開始的目的(通過組合減少注解),我可以調用一下代碼

/**
 * @author Fcb
 * @date 2020/6/23
 * @description
 */
public class Test {

  public static void main(String[] args) {
    Annotation[] annotations = AnnotatedService.class.getAnnotations();
    System.out.println(AnnotationUtils.findAnnotation(AnnotatedService.class, MyComponent.class));
  }
}

打印如下:

@com.example.demo.anno.MyComponent()

假如傳入的注解是一個不存在的值,則會返回null,示例如下:

/**
 * @author Fcb
 * @date 2020/6/23
 * @description
 */
public class Test {

  public static void main(String[] args) {
    Annotation[] annotations = AnnotatedService.class.getAnnotations();
    System.out.println(AnnotationUtils.findAnnotation(AnnotatedService.class, OtherAnno.class));
  }
}

控制臺打印:

null

Java本身沒有實現通過標記注解來組合注解的功能。假如我們自定義注解時需要可以使用Spring的AnnotationUtils.findAnnotation()的方法幫助我們實現。

以上是關于Spring @RestController注解組合實現方法的案例分析的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

偏关县| 郓城县| 岳池县| 招远市| 嘉祥县| 通城县| 南皮县| 洛隆县| 平度市| 望都县| 雷州市| 乌拉特中旗| 平潭县| 平南县| 苏尼特右旗| 库尔勒市| 旌德县| 定西市| 陈巴尔虎旗| 岗巴县| 义乌市| 襄城县| 宜章县| 汤阴县| 大悟县| 安乡县| 泰顺县| 大庆市| 沈阳市| 兴和县| 嘉峪关市| 永寿县| 利津县| 浙江省| 丰台区| 梓潼县| 云霄县| 教育| 惠州市| 盘山县| 衡南县|