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

Spring AOP 自定義注解的實(shí)現(xiàn)代碼

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

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> 

編寫自定義注解。實(shí)現(xiàn)對(duì)方法所實(shí)現(xiàn)的功能進(jìn)行描述,以便在通知中獲取描述信息

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

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

取值

描述

CONSTRUCTOR

用于描述構(gòu)造器。

FIELD

用于描述域。

LOCAL_VARIABLE

用于描述局部變量。

METHOD

用于描述方法。

PACKAGE

用于描述包。

PARAMETER

用于描述參數(shù)。

TYPE

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

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

取值

描述

SOURCE

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

CLASS

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

RUNTIME

在運(yùn)行時(shí)有效(即運(yùn)行時(shí)保留)。

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

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

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

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"); 
  } 
}

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

public @interface UserdefinedAnnotation { 
  int value(); 
} 

也可以寫成如下的形式

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

2:數(shù)組類型 我們?cè)谧远xannotation中定義一個(gè)數(shù)組類型的屬性,代碼如下:

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

使用: 

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

注意1:其中123外面的大括號(hào)是可以被省略的,因?yàn)橹挥幸粋€(gè)元素,如果里面有一個(gè)以上的元素的話,花括號(hào)是不能被省略的哦。比如{123,234}。

注意2:其中屬性名value我們?cè)谑褂玫臅r(shí)候進(jìn)行了省略,那是因?yàn)樗衯alue,如果是其他名字我們就不可以進(jìn)行省略了必須是@UserdefinedAnnotation(屬性名={123,234})這樣的格式。

3:枚舉類型

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

然后在定義一個(gè)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:默認(rèn)值

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

使用: 

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

5:注意

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

Annotation也是存在包結(jié)構(gòu)的,在使用的時(shí)候直接進(jìn)行導(dǎo)入即可。

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java Classloader機(jī)制用法代碼解析

    Java Classloader機(jī)制用法代碼解析

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

    解析阿里GTS開源版本fescar分布式事務(wù)

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

    Java多線程間的5種通信方式小結(jié)

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

    Java?對(duì)象深拷貝工具類的實(shí)現(xiàn)

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

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

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

    springboot 微信授權(quán)網(wǎng)頁登錄操作流程

    這篇文章主要介紹了springboot 微信授權(quán)網(wǎng)頁登錄操作流程,本文通過實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Java實(shí)現(xiàn)檢查多個(gè)時(shí)間段是否有重合

    Java實(shí)現(xiàn)檢查多個(gè)時(shí)間段是否有重合

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

    Java設(shè)計(jì)模式中責(zé)任鏈模式詳解

    責(zé)任鏈模式是將鏈中的每一個(gè)節(jié)點(diǎn)看做是一個(gè)對(duì)象,每個(gè)節(jié)點(diǎn)處理的請(qǐng)求均不相同,且內(nèi)部自動(dòng)維護(hù)下一個(gè)節(jié)點(diǎn)對(duì)象,當(dāng)一個(gè)請(qǐng)求從鏈?zhǔn)降氖锥伟l(fā)出時(shí),會(huì)沿著鏈的路徑依次傳遞給每一個(gè)節(jié)點(diǎn)對(duì)象。本文將通過示例和大家詳細(xì)聊聊責(zé)任鏈模式,需要的可以參考一下
    2022-11-11
  • Java中jqGrid 學(xué)習(xí)筆記整理——進(jìn)階篇(二)

    Java中jqGrid 學(xué)習(xí)筆記整理——進(jìn)階篇(二)

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

    js判斷是否含有GBK以外的字符的函數(shù)

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

最新評(píng)論

霍山县| 开原市| 清流县| 沁水县| 波密县| 武宁县| 紫云| 中宁县| 凌云县| 隆化县| 北碚区| 灵石县| 正蓝旗| 封丘县| 蒙城县| 枞阳县| 台山市| 琼结县| 都兰县| 斗六市| 巴楚县| 称多县| 西安市| 无锡市| 望奎县| 吕梁市| 浑源县| 申扎县| 普洱| 彰化市| 承德市| 富平县| 师宗县| 囊谦县| 株洲县| 保靖县| 高州市| 宣城市| 星子县| 和林格尔县| 衢州市|