最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring AOP 自定義注解的實現代碼

 更新時間:2017年04月21日 11:47:51   作者:changliangwl  
本篇文章主要介紹了Spring AOP 自定義注解的實現代碼,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

1.在Maven中加入以下以依賴:

<!-- Spring AOP + AspectJ by shipengzhi --> 
    <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-aop</artifactId> 
      <version>3.0.6.RELEASE</version> 
    </dependency> 
    <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-aspects</artifactId> 
      <version>3.0.6.RELEASE</version> 
    </dependency> 
    <dependency> 
      <groupId>org.aspectj</groupId> 
      <artifactId>aspectjrt</artifactId> 
      <version>1.6.11</version> 
    </dependency> 
    <dependency> 
      <groupId>org.aspectj</groupId> 
      <artifactId>aspectjweaver</artifactId> 
      <version>1.6.11</version> 
    </dependency> 
    <dependency> 
      <groupId>cglib</groupId> 
      <artifactId>cglib</artifactId> 
      <version>2.1_3</version> 
    </dependency> 
    <!-- end --> 

在spring-***.xml中加入spring支持,打開aop功能

頭文件聲明 :  

xmlns:aop="http://www.springframework.org/schema/aop"  
http://www.springframework.org/schema/aop  
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
  <!-- 自定義AOP --> 
  <aop:aspectj-autoproxy proxy-target-class="true"> 
    <aop:include name="controllerAspect" /> 
  </aop:aspectj-autoproxy> 
  <bean id="controllerAspect" class="com.sogou.upd.passport.common.aspect.ControllerAspect"></bean> 
 
  //或: 
  <aop:aspectj-autoproxy> 

編寫自定義注解。實現對方法所實現的功能進行描述,以便在通知中獲取描述信息

/* 
 * 校驗簽名合法性 自定義事務 
 */ 
@Target({ElementType.METHOD}) 
@Retention(RetentionPolicy.RUNTIME) 
@Documented 
@Inherited 
public @interface SecureValid { 
  String desc() default "身份和安全驗證開始..."; 
} 

@Target 用于描述注解的使用范圍(即:被描述的注解可以用在什么地方),其取值有:

取值

描述

CONSTRUCTOR

用于描述構造器。

FIELD

用于描述域。

LOCAL_VARIABLE

用于描述局部變量。

METHOD

用于描述方法。

PACKAGE

用于描述包。

PARAMETER

用于描述參數。

TYPE

用于描述類或接口(甚至 enum )。

@Retention 用于描述注解的生命周期(即:被描述的注解在什么范圍內有效),其取值有: 

取值

描述

SOURCE

在源文件中有效(即源文件保留)。

CLASS

在 class 文件中有效(即 class 保留)。

RUNTIME

在運行時有效(即運行時保留)。

@Documented 在默認的情況下javadoc命令不會將我們的annotation生成再doc中去的,所以使用該標記就是告訴jdk讓它也將annotation生成到doc中去

  @Inherited 比如有一個類A,在他上面有一個標記annotation,那么A的子類B是否不用再次標記annotation就可以繼承得到呢,答案是肯定的

  Annotation屬性值 有以下三種: 基本類型、數組類型、枚舉類型

1:基本串類型

public @interface UserdefinedAnnotation { 
  intvalue(); 
  String name(); 
  String address(); 
}

使用:

@UserdefinedAnnotation(value=123,name="wangwenjun",address="火星") 
  public static void main(String[] args) { 
    System.out.println("hello"); 
  } 
}

如果一個annotation中只有一個屬性名字叫value,我沒在使用的時候可以給出屬性名也可以省略。

public @interface UserdefinedAnnotation { 
  int value(); 
} 

也可以寫成如下的形式

@UserdefinedAnnotation(123) 等同于@UserdefinedAnnotation(value=123) 
  public static void main(String[] args) { 
    System.out.println("hello"); 
} 

2:數組類型 我們在自定義annotation中定義一個數組類型的屬性,代碼如下:

public @interface UserdefinedAnnotation { 
  int[] value(); 
} 

使用: 

public class UseAnnotation { 
   
  @UserdefinedAnnotation({123}) 
  public static void main(String[] args) { 
    System.out.println("hello"); 
  } 
}

注意1:其中123外面的大括號是可以被省略的,因為只有一個元素,如果里面有一個以上的元素的話,花括號是不能被省略的哦。比如{123,234}。

注意2:其中屬性名value我們在使用的時候進行了省略,那是因為他叫value,如果是其他名字我們就不可以進行省略了必須是@UserdefinedAnnotation(屬性名={123,234})這樣的格式。

3:枚舉類型

public enum DateEnum { 
  Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday 
} 

然后在定義一個annotation 

package com.wangwenjun.annatation.userdefined; 
 
public @interface UserdefinedAnnotation { 
  DateEnum week(); 
} 

使用:

public class UseAnnotation { 
  @UserdefinedAnnotation(week=DateEnum.Sunday) 
  public static void main(String[] args) { 
    System.out.println("hello"); 
  } 
} 

4:默認值

public @interface UserdefinedAnnotation { 
  String name() default "zhangsan"; 
}

使用: 

public class UseAnnotation { 
  @UserdefinedAnnotation() 
  public static void main(String[] args) { 
    System.out.println("hello"); 
  } 
} 

5:注意

Annotation是不可以繼承其他接口的,這一點是需要進行注意,這也是annotation的一個規(guī)定吧。

Annotation也是存在包結構的,在使用的時候直接進行導入即可。

Annotation類型的類型只支持原聲數據類型,枚舉類型和Class類型的一維數組,其他的類型或者用戶自定義的類都是不可以作為annotation的類型,我查看過文檔并且進行過測試。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Java Classloader機制用法代碼解析

    Java Classloader機制用法代碼解析

    這篇文章主要介紹了Java Classloader機制用法代碼解析,涉及JDK默認ClassLoader,雙親委托模型,自定義ClassLoader等相關內容,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • 解析阿里GTS開源版本fescar分布式事務

    解析阿里GTS開源版本fescar分布式事務

    這篇文章主要為大家介紹解析阿里GTS開源版本fescar分布式事務的原理及使用說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多進步
    2022-02-02
  • Java多線程間的5種通信方式小結

    Java多線程間的5種通信方式小結

    有兩個線程,A 線程向一個集合里面依次添加元素“abc”字符串,一共添加十次,當添加到第五次的時候,希望 B 線程能夠收到 A 線程的通知,然后 B 線程執(zhí)行相關的業(yè)務操作,本文介紹的5種通信方式都是基本這兩種模型來實現的,需要的朋友可以參考下
    2023-10-10
  • Java?對象深拷貝工具類的實現

    Java?對象深拷貝工具類的實現

    本文主要介紹了Java?對象深拷貝工具類的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • Java線程池運行狀態(tài)監(jiān)控實現解析

    Java線程池運行狀態(tài)監(jiān)控實現解析

    這篇文章主要介紹了Java線程池運行狀態(tài)監(jiān)控實現解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • springboot 微信授權網頁登錄操作流程

    springboot 微信授權網頁登錄操作流程

    這篇文章主要介紹了springboot 微信授權網頁登錄操作流程,本文通過實例圖文相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Java實現檢查多個時間段是否有重合

    Java實現檢查多個時間段是否有重合

    這篇文章主要為大家詳細介紹了如何使用Java實現檢查多個時間段是否有重合,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-02-02
  • Java設計模式中責任鏈模式詳解

    Java設計模式中責任鏈模式詳解

    責任鏈模式是將鏈中的每一個節(jié)點看做是一個對象,每個節(jié)點處理的請求均不相同,且內部自動維護下一個節(jié)點對象,當一個請求從鏈式的首段發(fā)出時,會沿著鏈的路徑依次傳遞給每一個節(jié)點對象。本文將通過示例和大家詳細聊聊責任鏈模式,需要的可以參考一下
    2022-11-11
  • Java中jqGrid 學習筆記整理——進階篇(二)

    Java中jqGrid 學習筆記整理——進階篇(二)

    這篇文章主要介紹了Java中jqGrid 學習筆記整理——進階篇(二)的相關資料,需要的朋友可以參考下
    2016-04-04
  • js判斷是否含有GBK以外的字符的函數

    js判斷是否含有GBK以外的字符的函數

    判斷是否含有GBK以外的特殊字符
    2008-10-10

最新評論

七台河市| 广宁县| 古浪县| 永新县| 招远市| 双峰县| 温宿县| 明溪县| 甘孜县| 洱源县| 延长县| 嘉祥县| 澄江县| 青河县| 都安| 搜索| 泾川县| 吉林省| 乌拉特前旗| 定州市| 囊谦县| 永顺县| 安仁县| 容城县| 巨鹿县| 武川县| 资兴市| 中西区| 大厂| 肇东市| 金阳县| 张家口市| 宿迁市| 东平县| 张家港市| 巴林右旗| 厦门市| 曲阜市| 衡水市| 雅江县| 南陵县|