国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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

服務器之家 - 編程語言 - Java教程 - 關于spring中aop的注解實現方法實例詳解

關于spring中aop的注解實現方法實例詳解

2020-12-09 11:50小Cai先森 Java教程

這篇文章主要給大家介紹了關于spring中aop的注解實現方法的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面跟著小編來一起看看吧。

前言

在之前的一篇文章中我們講到spring的xml實現,這里我們講講使用注解如何實現aop呢。前面已經講過aop的簡單理解了,這里就不在贅述了。話不多說,來一起看看詳細的介紹:

注解方式實現aop我們主要分為如下幾個步驟:

  1.在切面類(為切點服務的類)前用@Aspect注釋修飾,聲明為一個切面類。

  2.用@Pointcut注釋聲明一個切點,目的是為了告訴切面,誰是它的服務對象。(此注釋修飾的方法的方法體為空,不需要寫功能比如 public void say(){};就可以了,方法名可以被候命的具體服務功能所以引用,它可以被理解為切點對象的一個代理對象方法)

  3.在對應的方法前用對應的通知類型注釋修飾,將對應的方法聲明稱一個切面功能,為了切點而服務

  4.在spring配置文件中開啟aop注釋自動代理。如: <aop:aspectj-autoproxy/>

這樣講可能還是很抽象,那么,廢話不多說,我們代碼說話,代碼如下:

騎士類:(看過上一篇內容的就知道騎士是什么東西了,嘿嘿嘿)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.cjh.aop2;
 
import org.springframework.stereotype.Component;
 
/**
 * @author Caijh
 *
 * 2017年7月11日 下午3:53:19
 */
@Component("knight")
public class BraveKnight {
 public void saying(){
  System.out.println("我是騎士..(切點方法)");
 }
}

切面類:(注釋主要在這里體現)

?
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package com.cjh.aop2;
 
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
 
/**
 * @author Caijh
 * email:codecjh@163.com
 * 2017年7月12日 上午9:31:43
 */
/**
 * 注解方式聲明aop
 * 1.用@Aspect注解將類聲明為切面(如果用@Component("")注解注釋為一個bean對象,那么就要在spring配置文件中開啟注解掃描,<context:component-scan base-package="com.cjh.aop2"/>
 *  否則要在spring配置文件中聲明一個bean對象)
 * 2.在切面需要實現相應方法的前面加上相應的注釋,也就是通知類型。
 * 3.此處有環繞通知,環繞通知方法一定要有ProceedingJoinPoint類型的參數傳入,然后執行對應的proceed()方法,環繞才能實現。
 */
@Component("annotationTest")
@Aspect
public class AnnotationTest {
 //定義切點
 @Pointcut("execution(* *.saying(..))")
 public void sayings(){}
 /**
  * 前置通知(注解中的sayings()方法,其實就是上面定義pointcut切點注解所修飾的方法名,那只是個代理對象,不需要寫具體方法,
  * 相當于xml聲明切面的id名,如下,相當于id="embark",用于供其他通知類型引用)
  * <aop:config>
  <aop:aspect ref="mistrel">
   <!-- 定義切點 -->
   <aop:pointcut expression="execution(* *.saying(..))" id="embark"/>
   <!-- 聲明前置通知 (在切點方法被執行前調用) -->
   <aop:before method="beforSay" pointcut-ref="embark"/>
   <!-- 聲明后置通知 (在切點方法被執行后調用) -->
   <aop:after method="afterSay" pointcut-ref="embark"/>
  </aop:aspect>
  </aop:config>
  */
 @Before("sayings()")
 public void sayHello(){
  System.out.println("注解類型前置通知");
 }
 //后置通知
 @After("sayings()")
 public void sayGoodbey(){
  System.out.println("注解類型后置通知");
 }
 //環繞通知。注意要有ProceedingJoinPoint參數傳入。
 @Around("sayings()")
 public void sayAround(ProceedingJoinPoint pjp) throws Throwable{
  System.out.println("注解類型環繞通知..環繞前");
  pjp.proceed();//執行方法
  System.out.println("注解類型環繞通知..環繞后");
 }
}

spring配置文件:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:aop="http://www.springframework.org/schema/aop"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
  http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
 <!-- 開啟注解掃描 -->
 <context:component-scan base-package="com.cjh.aop2"/>
 <!-- 開啟aop注解方式,此步驟s不能少,這樣java類中的aop注解才會生效 -->
 <aop:aspectj-autoproxy/>
</beans>

測試代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.cjh.aop2;
 
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
/**
 *
 * @author Caijh
 * email:codecjh@163.com
 * 2017年7月11日 下午6:27:06
 */
public class Test {
 public static void main(String[] args) {
  ApplicationContext ac = new ClassPathXmlApplicationContext("com/cjh/aop2/beans.xml");
  BraveKnight br = (BraveKnight) ac.getBean("knight");
  br.saying();
 }
}

運行結果:

注解類型環繞通知..環繞前

注解類型前置通知

我是騎士..(切點方法)

注解類型環繞通知..環繞后

注解類型后置通知

========================分割線===================================

因為使用了注解方式,所以配置文件少了很多內容,只需要一句<context:component-scan base-package="com.cjh.aop2"/>聲明要掃描的包,框架會自動掃描注釋并生成bean對象。有個@Component("knight")這個注釋,和<bean id="knight" class="com.cjh.aop2.BraveKnight"/>這個配置時一樣的意思,框架會自動識別并創建名為knight的BraveKnight對象。所以有了注釋,只需要開啟注釋掃描配置就好了,無需再做相同的bean配置。

如果運行過程中出現Spring aop : error at ::0 can't find referenced pointcut sleepPonit的錯誤,那么很可能是spring的包的版本問題,

我用的是spring4的版本,然后還需要加aspectjrt-1.7.4.jar和aspectjweaver-1.7.4.jar兩個包

下載地址:aspectjrt_aspectjweaver.rar

工程目錄如下:(打碼碼的類不用管,只是為了不為大家造成誤導,所以劃掉了)

關于spring中aop的注解實現方法實例詳解

通知注解類型如下:

關于spring中aop的注解實現方法實例詳解

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持

原文鏈接:http://www.cnblogs.com/caijh/p/7154691.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 国产精品久久久久久久久免费桃花 | www.亚洲成人 | 国产精品99久久久久久久vr | 羞羞的网站 | 久久免费精品 | 亚洲一区在线视频 | 午夜视频网 | 一区免费看 | 中文字幕1区2区3区 日韩免费高清视频 | 91久久综合亚洲鲁鲁五月天 | www.久草| 日韩和的一区二在线 | 人人爱人人爽 | 香蕉视频成人在线观看 | 免费 成 人 黄 色 | 在线不卡视频 | 欧美一区二区三区免费 | 在线成人av | 欧美成人区 | av动漫一区二区 | 日本在线视频一区二区三区 | 91久久久久久久久久久 | 精品成人av一区二区在线播放 | 欧美精品第一页 | 欧美视频网站 | 天天操天天干天天插 | 久久久精品综合 | 亚洲精品在线免费看 | 成人精品鲁一区一区二区 | 黄色片免费观看网站 | 五月天激情综合网 | www.黄在线看 | av免费黄色 | 久久美女 | 久久er99热精品一区二区 | 91麻豆产精品久久久 | 成人性大片免费观看网站 | 在线观看国产二区 | 日韩电影免费在线观看中文字幕 | 亚洲综合色自拍一区 | 国产精品久久久久久吹潮 |