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

詳解在Spring中如何使用AspectJ來實(shí)現(xiàn)AOP

 更新時(shí)間:2018年06月30日 17:03:53   作者:deniro  
這篇文章主要介紹了詳解在Spring中如何使用AspectJ來實(shí)現(xiàn)AOP,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

AspectJ 是通過注解來描述切點(diǎn)與增強(qiáng)的。

1 開發(fā)環(huán)境要求

因?yàn)橐褂米⒔猓哉埓_保使用的 Java5.0 及以上版本。

引入 AspectJ 相關(guān)類庫:

<dependency>
 <groupId>org.aspectj</groupId>
 <artifactId>aspectjrt</artifactId>
 <version>${aspectj.version}</version>
</dependency>
<dependency>
 <groupId>org.aspectj</groupId>
 <artifactId>aspectjweaver</artifactId>
 <version>${aspectj.version}</version>
</dependency>
<dependency>
 <groupId>org.aspectj</groupId>
 <artifactId>aspectjtools</artifactId>
 <version>${aspectj.version}</version>
</dependency>
<dependency>
 <groupId>aopalliance</groupId>
 <artifactId>aopalliance</artifactId>
 <version>${aopalliance.version}</version>
</dependency>

2 編程方式

@Aspect//標(biāo)識切面

public class PreRentAspect {
 /**
  * 增強(qiáng)邏輯
  */
 @Before("execution(* rent(..))")//定義切點(diǎn)與增強(qiáng)類型
 public void beforeRent() {
  System.out.println("開始執(zhí)行租賃動(dòng)作");
 }
}

這個(gè)切面只是一個(gè)普通的 POJO,只不過加了 @Aspect 注解。

@Before("execution(* rent(..))") 中的 @Before 表示增強(qiáng)類型是前置增強(qiáng),它的內(nèi)容是 @AspectJ 切點(diǎn)表達(dá)式,這里表示的是在目標(biāo)類的 rent() 方法上織入增強(qiáng), rent() 可以包含任意入?yún)⒑腿我獾姆祷刂怠?/p>

帶  @Aspect 的類,通過注解與代碼,將切點(diǎn)、增強(qiáng)類型和增強(qiáng)的橫切邏輯整合到了一起,是不是很方便呀O(∩_∩)O哈哈~

單元測試:

AspectJProxyFactory factory = new AspectJProxyFactory();

//設(shè)置目標(biāo)類
factory.setTarget(new User());

//添加切面類
factory.addAspect(PreRentAspect.class);

User proxy = factory.getProxy();
String userId = "001";
proxy.rent(userId);
proxy.back(userId);

輸出結(jié)果:

--開始執(zhí)行租賃動(dòng)作--
User:租賃【充電寶】
User:歸還【充電寶】

3 配置方式

<!-- 目標(biāo)類-->
<bean id="user" class="net.deniro.spring4.aspectj.User"/>

<!-- 切面類-->
<bean class="net.deniro.spring4.aspectj.PreRentAspect"/>

<!-- 自動(dòng)創(chuàng)建代理-->
<bean
  class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator"/>

單元測試:

ApplicationContext context = new ClassPathXmlApplicationContext(spring.xml");
User user = (User) context.getBean("user");
String userId = "001";
user.rent(userId);
user.back(userId);

輸出結(jié)果與編程方式完全相同。

也可以基于 Schema 的 aop 命名空間進(jìn)行配置:

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

 <!--aspectj 驅(qū)動(dòng)器 -->
 <aop:aspectj-autoproxy/>

 <!-- 目標(biāo)類-->
 <bean id="user" class="net.deniro.spring4.aspectj.User"/>


 <!-- 切面類-->
 <bean class="net.deniro.spring4.aspectj.PreRentAspect"/>
</beans>

這樣的配置更加簡潔。其實(shí)在 <aop:aspectj-atuoproxy/> 內(nèi)部已經(jīng)采用了自動(dòng)代理模式啦 O(∩_∩)O哈哈~

<aop:aspectj-atuoproxy/> proxy-target-class 屬性,默認(rèn)為 false ,表示使用 JDK 動(dòng)態(tài)代理技術(shù)織入增強(qiáng);此值為 true 則表示使用 CGLib 動(dòng)態(tài)代理技術(shù)織入增強(qiáng) 。 如果目標(biāo)類沒有聲明接口,那么即使  proxy-target-class 設(shè)置為 false,也會(huì)自動(dòng)使用 CGLib 動(dòng)態(tài)代理織入增強(qiáng)的喲O(∩_∩)O哈哈~

基于 Java5.0+ 的項(xiàng)目,建議使用 AspectJ 來配置切點(diǎn)與增強(qiáng),因?yàn)檫@樣更簡潔、也更直接。

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

相關(guān)文章

  • SpringCloud之分布式配置中心Spring Cloud Config高可用配置實(shí)例代碼

    SpringCloud之分布式配置中心Spring Cloud Config高可用配置實(shí)例代碼

    這篇文章主要介紹了SpringCloud之分布式配置中心Spring Cloud Config高可用配置實(shí)例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-04-04
  • Java-文件File簡單實(shí)用方法(分享)

    Java-文件File簡單實(shí)用方法(分享)

    下面小編就為大家?guī)硪黄狫ava-文件File簡單實(shí)用方法(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • spring?jpa?審計(jì)功能自定義填充字段方式

    spring?jpa?審計(jì)功能自定義填充字段方式

    這篇文章主要介紹了spring?jpa審計(jì)功能自定義填充字段方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java事件監(jiān)聽機(jī)制講解

    Java事件監(jiān)聽機(jī)制講解

    今天小編就為大家分享一篇關(guān)于Java事件監(jiān)聽機(jī)制講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • Java中Retry方法的簡單實(shí)現(xiàn)

    Java中Retry方法的簡單實(shí)現(xiàn)

    這篇文章主要介紹了Java中Retry方法的簡單實(shí)現(xiàn),Retry主要是利用Java的lambda表達(dá)式和線程接口實(shí)現(xiàn)有返回值和無返回值的重試,思考了下就寫了一個(gè)簡易Retry功能分享出來,需要的朋友可以參考下
    2024-01-01
  • springboot多數(shù)據(jù)源使用@Qualifier自動(dòng)注入無效的解決

    springboot多數(shù)據(jù)源使用@Qualifier自動(dòng)注入無效的解決

    這篇文章主要介紹了springboot多數(shù)據(jù)源使用@Qualifier自動(dòng)注入無效的解決,具有很好的參考價(jià)值,希望對大家有所幫助。也希望大家多多支持腳本之家
    2021-11-11
  • SpringBoot集成quartz實(shí)現(xiàn)定時(shí)任務(wù)

    SpringBoot集成quartz實(shí)現(xiàn)定時(shí)任務(wù)

    這篇文章主要介紹了如何使用SpringBoot整合Quartz,并將定時(shí)任務(wù)寫入庫中(持久化存儲(chǔ)),還可以任意對定時(shí)任務(wù)進(jìn)行如刪除、暫停、恢復(fù)等操作,需要的可以了解下
    2023-09-09
  • Java基礎(chǔ)之邏輯運(yùn)算符知識總結(jié)

    Java基礎(chǔ)之邏輯運(yùn)算符知識總結(jié)

    今天帶大家學(xué)習(xí)Java基礎(chǔ)知識,文中對Java邏輯運(yùn)算符進(jìn)行了非常詳細(xì)的介紹,有相關(guān)代碼示例,對正在學(xué)習(xí)java的小伙伴很有幫助,需要的朋友可以參考下
    2021-05-05
  • JAVA讀取HDFS的文件數(shù)據(jù)出現(xiàn)亂碼的解決方案

    JAVA讀取HDFS的文件數(shù)據(jù)出現(xiàn)亂碼的解決方案

    這篇文章主要介紹了JAVA讀取HDFS的文件數(shù)據(jù)出現(xiàn)亂碼的解決方案,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-11-11
  • Java正則多字符串匹配替換

    Java正則多字符串匹配替換

    正則表達(dá)式異常強(qiáng)大,一直理解不深,用的也不深,這次項(xiàng)目中嘗試,體會(huì)到了它的強(qiáng)大之處。字符串查找,匹配,替換,正則無不能做,特別是靈活的運(yùn)用子串匹配得到的變量值$1,$2,再進(jìn)行二次處理能夠達(dá)到很巧妙的效果。
    2013-02-02

最新評論

安塞县| 宾川县| 扎兰屯市| 饶平县| 临泉县| 峨山| 天柱县| 罗田县| 无极县| 湖南省| 察哈| 尉氏县| 翁源县| 宜昌市| 景德镇市| 拜城县| 碌曲县| 柳州市| 蕲春县| 东台市| 叶城县| 砚山县| 龙门县| 滁州市| 九龙坡区| 马龙县| 上栗县| 吉水县| 长顺县| 荔波县| 榆树市| 津市市| 邓州市| 介休市| 望都县| 越西县| 历史| 肥西县| 枣强县| 思南县| 奉新县|