AODp

一、AOP是OOP的延續,是(Aspect Oriented Programming)的縮寫,意思是面向切面編程。

AOP(Aspect Orient Programming),作為面向對象編程的一種補充,廣泛應用于處理一些具有橫切性質的系統級服務,

如事務管理、安全檢查、緩存、對象池管理等。 AOP 實現的關鍵就在于 AOP 框架自動創建的 AOP 代理,

AOP 代理則可分為靜態代理和動態代理兩大類,其中靜態代理是指使用 AOP 框架提供的命令進行編譯,

從而在編譯階段就可生成 AOP 代理類,因此也稱為編譯時增強;

而動態代理則在運行時借助于 JDK 動態代理、CGLIB 等在內存中"臨時"生成 AOP 動態代理類,因此也被稱為運行時增強

AOP 的實現:

MyInterceptor、MyInterceptor2分別是以annotations和xml定義的切面類

?

package com.service;? ??

import org.aspectj.lang.annotation.Aspect;?

import org.aspectj.lang.annotation.Before;?

import org.aspectj.lang.annotation.Pointcut;? ?

@Aspect?

public class MyInterceptor {?

??? @Pointcut("execution (* com.serviceImpl.PersonServiceImpl.*(..))")?

??? private void myMethod(){};? ?

??? @Before("myMethod()")?

??? public void doAccessCheck(){?

??????? System.out.println("before");?

??? }? ???

}

[java] view plain copy

package com.service;

public class MyInterceptor2 {?

??? public void doAccessCheck(){?

??????? System.out.println("before");?

??? }?

}?

業務和接口

[java] view plain copy

package com.service;? ??

public interface PersonService {?

??? public void save(String name);?

??? public void update(String name);?

}?

[java] view plain copy

package com.serviceImpl;?

import com.service.PersonService; ??

public class PersonServiceImpl implements PersonService {?

??? @Override?

??? public void save(String name) {?

??????? // TODO Auto-generated method stub?

??????? System.out.println("保存");?

??? }?

??? @Override?

??? public void update(String name) {?

??????? // TODO Auto-generated method stub?

??????? System.out.println("修改");?

??? }?

}

簡單做個方法前通知,其他的都一樣。

[java] view plain copy

<?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:aop="http://www.springframework.org/schema/aop"?

??? xsi:schemaLocation="http://www.springframework.org/schema/beans?

?????????? http://www.springframework.org/schema/beans/spring-beans-2.5.xsd?

??????????? http://www.springframework.org/schema/aop?

?????????? http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">?

??? <aop:aspectj-autoproxy/>? ??

??? <bean id="personServiceImpl" class="com.serviceImpl.PersonServiceImpl"></bean>?

??? <bean id="personInterceptor" class="com.service.MyInterceptor2"></bean>? ?

??? <aop:config>?

??????? <aop:aspect id="asp" ref="personInterceptor">?

??????????? <aop:pointcut id="myCut" expression="execution (* com.serviceImpl.PersonServiceImpl.*(..))"/>?

??????????? <aop:before pointcut-ref="myCut" method="doAccessCheck"/>?

??????? </aop:aspect>??????

??? </aop:config>?

</beans> ?

測試類

[java] view plain copy

package com.test; ??

import org.junit.Test;?

import org.springframework.context.ApplicationContext;?

import org.springframework.context.support.ClassPathXmlApplicationContext;? ??

import com.service.PersonService;? ?

public class AopTest {? ???

??? @Test?

??? public void interceptorTest(){?

??????? ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");?

??????? PersonService ps = (PersonService) ac.getBean("personServiceImpl");?

??????? ps.save("aa");?

??? }?

} ?

轉載于:https://www.cnblogs.com/lihaiyang123/p/7084595.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/252431.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/252431.shtml
英文地址,請注明出處:http://en.pswp.cn/news/252431.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[洛谷P4174][NOI2006]最大獲利

題目大意&#xff1a;同Petya and Graph&#xff0c;數據范圍改成$n\leqslant5\times10^3,m\leqslant5\times10^4$ 題解&#xff1a;同上 卡點&#xff1a;無 C Code&#xff1a; #include <algorithm> #include <cstdio> #define maxn 5010 #define maxm 50010 co…

使用ros發布UVC相機和串口IMU數據

&#xff11;&#xff0e;目的&#xff1a;為了可以標定普通USB相機和固定在相機上的外置IMU的外參,我希望通過ROS獲取更高分辨率和更高頻率的圖像數據,并且可以將圖像和imu的topic發布出來,直接使用rosbag record錄制話題數據,寫入bag文件,這樣獲得的bag文件直接可以用于相機和…

API自動化測試利器——Postman

自從開始做API開發之后&#xff0c;我就在尋找合適的API測試工具。一開始不是很想用Chrome擴展&#xff0c;用的WizTools的工具&#xff0c;后來試過一次Postman之后就停不下來了&#xff0c;還買了付費的Jetpacks。推出Team Sync Beta之后我又把這個工具推廣給團隊&#xff0c…

gcc,cc,g++,CC的區別

***gcc是C編譯器&#xff1b; ***g是C編譯器&#xff1b; ***linux下cc一般是一個符號連接&#xff0c;指向gcc ***gcc說明 1.gcc編譯常用格式&#xff1a; gcc C源文件 -o 目標文件 或 gcc -o 目標文件 C源文件 或 gcc C源文件 最后一種情況產生的目標文件默認為a.out 2.gcc…

云原生實踐之 RSocket 從入門到落地:Servlet vs RSocket

技術實踐的作用在于&#xff1a;除了用于構建業務&#xff0c;也是為了驗證某項技術或框架是否值得大規模推廣。 本期開始&#xff0c;我們推出《RSocket 從入門到落地》系列文章&#xff0c;通過實例和對比來介紹RSocket。主要圍繞RSocket如何實現Polyglot RPC、Service Regis…

制作.sens數據集跑通bundlefusion

1. 主要參考這篇博客實現 https://blog.csdn.net/Wuzebiao2016/article/details/94426905 2. 首先就是將自己采集的RGBD圖像的保存格式向Bundlefusion需要的格式對齊&#xff0c;如彩色圖的命名格式是frame-000000.color.png&#xff0c;深度圖的命名規則是frame-000000.depth…

用ul li實現邊框重合并附帶鼠標經過效果

邊框重合這個效果并不難&#xff0c;只是我們沒有真正的動手做過而已&#xff0c;下面讓我們來談談用ul li如何實現邊框重合&#xff0c;并附帶鼠標經過效果 1 <!DOCTYPE html>2 <html lang"zh-CN">3 4 <head>5 <title></title>6 …

hive 中窗口函數row_number,rank,dense_ran,ntile分析函數的用法

https://www.cnblogs.com/wujin/p/6051768.html轉載于:https://www.cnblogs.com/0xcafedaddy/p/8385476.html

python之moviepy庫的安裝與使用

目的&#xff1a;因為需要保存一個大大的.mp4視頻&#xff0c;以防過程中設備出現異常導致整個長長的視頻無法正常保存&#xff0c;所以采用分段保存視頻的方式&#xff0c;每500幀保存一段&#xff0c;然后再將視頻合到一起&#xff0e;最近剛開始學習python,發現python真的很…

oracle 之 安裝后pl/sql登錄報ora-12154

這個問題一開始困擾了很久。 查的資料是復制一小段代碼到tnsnames.ora中 SID名 (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST localhost)(PORT 1522)) (CONNECT_DATA (SERVER DEDICATED) (SERVICE_NAME SID名) ) 注意SID名前面不能有任何其他字符&…

如何避免表單重復提交

客戶端方案 禁掉提交按鈕。 表單提交后使用Javascript使提交按鈕disable。這種方法防止心急的用戶多次點擊按鈕。但有個問題&#xff0c;如果客戶端把Javascript給禁止掉&#xff0c;這種方法就無效了。 使用Post/Redirect/Get模式 在提交后執行頁面重定向&#xff0c;這就是所…

十六進制轉八進制

【問題描述】 問題描述 給定n個十六進制正整數&#xff0c;輸出它們對應的八進制數。 輸入格式 輸入的第一行為一個正整數n &#xff08;1<n<10&#xff09;。 接下來n行&#xff0c;每行一個由0~9、大寫字母A~F組成的字符串&#xff0c;表示要轉換的十六進制正整數&…

使用iai_kinect2標定kinectV2相機

實驗背景&#xff1a;因為需要制作bundlefusion需要的數據集&#xff0c;所以需要使用kinectV2相機獲取rgbd圖像&#xff0c;年前的時候在我的筆記本上安裝了libfreenect2庫和iai_kinect2&#xff0c;標定過一次kinecv2相機&#xff0c;然后使用kinectv2相機實時獲取的圖像實現…

tar只解壓tar包中某個文件

如果tar包很大&#xff0c;而只想解壓出其中某個文件。方法如下&#xff1a; 只想解壓出Redis-1.972.tar 中的Changes文件&#xff0c;來查看有哪些更改。 [rootuplooking]# tar -tf Redis-1.972.tar Redis-1.972…

扎克伯格的中文夜:想要成功就不能放棄

10月23日消息。雖然并不太流暢。昨天馬克?扎克伯格依舊用中文與清華經管學院主持人完畢了一場對話&#xff1b;在對話中&#xff0c;這位Facebook創始人兼首席運行官闡述了自己學習中文的原因&#xff1a;想要和太太&#xff08;普里西拉?陳&#xff09;的家人交流&#xff1…

python將ros下bag文件的所有topic解析為csv格式

背景&#xff1a;最近在制作kimera的數據集&#xff0c;尤其是運行semantic模塊所需要的bag文件中有很多topic&#xff0c;但是很多不知道topic中裝的是什么數據&#xff0c;及其格式&#xff0c;所以我就想著怎么可以將bag中的topic都解析數來&#xff0c;這樣就能知道bag中都…

十九. Python基礎(19)--異常

十九. Python基礎(19)--異常 1 ● 捕獲異常 if VS異常處理: if是預防異常出現, 異常處理是處理異常出現 異常處理一般格式: try: <...............> #可能得到異常的語句 except <.......>: #捕獲是哪種異常 <...............> #出現異常的處理方…

洛谷1052——過河(DP+狀態壓縮)

題目描述 在河上有一座獨木橋&#xff0c;一只青蛙想沿著獨木橋從河的一側跳到另一側。在橋上有一些石子&#xff0c;青蛙很討厭踩在這些石子上。由于橋的長度和青蛙一次跳過的距離都是正整數&#xff0c;我們可以把獨木橋上青蛙可能到達的點看成數軸上的一串整點&#xff1a;0…

Tensorflow學習教程------tfrecords數據格式生成與讀取

首先是生成tfrecords格式的數據&#xff0c;具體代碼如下&#xff1a; #coding:utf-8import os import tensorflow as tf from PIL import Imagecwd os.getcwd() 此處我加載的數據目錄如下&#xff1a; bt -- 14018.jpg14019.jpg14020.jpgnbt -- 1_ddd.jpg1_dsdfs.jpg1_dfd.…

ROS獲取KinectV2相機的彩色圖和深度圖并制作bundlefusion需要的數據集

背景&#xff1a; 最近在研究BundleFusion&#xff0c;跑通官方數據集后&#xff0c;就想著制作自己的數據集來運行bundlefusion&#xff0e;KinectV2相機可直接獲取的圖像的分辨率分為三個HD 1920x1080, QHD: 960X540&#xff0c;SD: 512x424.我選擇是中間的分辨率qhd. 錄制…