激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Spring AOP 自定義注解的實現代碼

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

2020-09-15 15:40changliangwl Java教程

本篇文章主要介紹了Spring AOP 自定義注解的實現代碼,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<!-- 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功能

頭文件聲明 :  

?
1
2
3
4
5
6
7
8
9
10
11
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>

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

?
1
2
3
4
5
6
7
8
9
10
/*
 * 校驗簽名合法性 自定義事務
 */
@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:基本串類型

?
1
2
3
4
5
public @interface UserdefinedAnnotation {
  intvalue();
  String name();
  String address();
}

使用:

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

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

?
1
2
3
public @interface UserdefinedAnnotation {
  int value();
}

也可以寫成如下的形式

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

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

?
1
2
3
public @interface UserdefinedAnnotation {
  int[] value();
}

使用: 

?
1
2
3
4
5
6
7
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:枚舉類型

?
1
2
3
public enum DateEnum {
  Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
}

然后在定義一個annotation 

?
1
2
3
4
5
package com.wangwenjun.annatation.userdefined;
 
public @interface UserdefinedAnnotation {
  DateEnum week();
}

使用:

?
1
2
3
4
5
6
public class UseAnnotation {
  @UserdefinedAnnotation(week=DateEnum.Sunday)
  public static void main(String[] args) {
    System.out.println("hello");
  }
}

4:默認值

?
1
2
3
public @interface UserdefinedAnnotation {
  String name() default "zhangsan";
}

使用: 

?
1
2
3
4
5
6
public class UseAnnotation {
  @UserdefinedAnnotation()
  public static void main(String[] args) {
    System.out.println("hello");
  }
}

5:注意

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

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

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

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

原文鏈接:http://blog.csdn.net/changliangwl/article/details/51498345

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 99精品热视频| 成人国产精品一区二区毛片在线 | 香蕉久久久 | 久久久久久久久久亚洲 | 欧美极品欧美精品欧美视频 | 国产日韩一区二区三区在线观看 | 姑娘第四集免费看视频 | 性生活视频网站 | av电影直播 | 久久撸视频 | 福利在线国产 | 91九色丨porny丨国产jk | 久久精品中文字幕一区二区三区 | 色人阁导航 | 婷婷久久久久久 | 一级黄色国产视频 | 国产va在线观看 | 欧美aaaaa一级毛片在线 | 久章草在线观看 | 日韩在线播放第一页 | 北京一级毛片 | 黄色片免费在线 | 成年人激情在线 | 国内精品久久久久久久久久 | 宅男视频在线观看免费 | 日本一道aⅴ不卡免费播放 日日草夜夜操 | 欧美一级淫片免费播放口 | 密室逃脱第一季免费观看完整在线 | 蜜桃传媒视频麻豆第一区免费观看 | 538在线精品 | 一级黄色影院 | 国产精品美女一区二区 | 草久影视 | 日本在线观看一区二区 | 欧美精品亚洲人成在线观看 | 久久精品欧美一区 | 精品成人免费 | 国产国语毛片 | 中文字幕一区二区三区四区 | 久久国产免费视频 | 中文字幕欧美日韩 |