日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring-AOP 通过配置文件实现 环绕增强

發(fā)布時間:2025/3/21 javascript 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring-AOP 通过配置文件实现 环绕增强 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 概述
  • 實例

概述

環(huán)繞增強允許在目標(biāo)類方法調(diào)用前后織入橫切邏輯,它綜合實現(xiàn)了前置,后置增強兩者的功能.


實例

代碼已托管到Github—> https://github.com/yangshangwei/SpringMaster

下面是我們用環(huán)繞增強同時實現(xiàn)上面的我們的示例。步驟如下:
創(chuàng)建業(yè)務(wù)接口類:Waiter.java
創(chuàng)建業(yè)務(wù)實現(xiàn)類:NativeWaiter.java
創(chuàng)建業(yè)務(wù)增強類:GreetingInterceptor.java
創(chuàng)建配置文件:conf-advice.xml
創(chuàng)建增強測試類:MethodInterceptorTest.java

業(yè)務(wù)接口類

package com.xgj.aop.spring.advice.methodInterceptor;public interface Waiter {void greetTo(String name);void serverTo(String name); }

業(yè)務(wù)實現(xiàn)類

package com.xgj.aop.spring.advice.methodInterceptor;public class NaiveWaiter implements Waiter {@Overridepublic void greetTo(String name) {System.out.println("greetTo " + name);}@Overridepublic void serverTo(String name) {System.out.println("serverTo " + name);}}

業(yè)務(wù)增強類GreetingInterceptor.java

package com.xgj.aop.spring.advice.methodInterceptor;import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation;public class GreetingInterceptor implements MethodInterceptor {/*** 截取目標(biāo)類方法的執(zhí)行,并在前后添加橫切邏輯* * @param invocation* 封裝了目標(biāo)方法和入?yún)?shù)組以及目標(biāo)方法所帶的實例對象* @return 代理對象* @throws Throwable*/@Overridepublic Object invoke(MethodInvocation invocation) throws Throwable {// 獲取目標(biāo)方法的入?yún)?/span>Object[] args = invocation.getArguments();// 在目標(biāo)方法執(zhí)行前調(diào)用String clientName = (String) args[0];System.out.println("GreetingInterceptor:How are you!" + clientName);// 利用反射機制來調(diào)用目標(biāo)方法Object object = invocation.proceed();// 在目標(biāo)方法執(zhí)行后調(diào)用System.out.println("GreetingInterceptor: please enjoy youself!");return object;}}

Spring直接使用AOP聯(lián)盟所定義的MethodInterceptor作為環(huán)繞增強的接口,該接口擁有唯一的接口方法

public Object invoke(MethodInvocation invocation) throws Throwable

MethodInvocation不但封裝了目標(biāo)方法及其入?yún)?shù)組,還封裝了目標(biāo)方法所在的實例對象。通過MethodInvocation的getArguments()方法可以獲取到目標(biāo)方法的入?yún)?shù)組,通過proceed()方法反射調(diào)用目標(biāo)實例相應(yīng)的方法。

通過在實現(xiàn)類中定義橫切邏輯可以很容易的實現(xiàn)方法前后的增強。


接下來在配置文件中對其進(jìn)行配置:

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:p="http://www.springframework.org/schema/p"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="target" class="com.xgj.aop.spring.advice.methodInterceptor.NaiveWaiter"/><bean id="greetingAroundAdvice" class="com.xgj.aop.spring.advice.methodInterceptor.GreetingInterceptor"></bean><bean id="waiter" class="org.springframework.aop.framework.ProxyFactoryBean"p:proxyInterfaces="com.xgj.aop.spring.advice.methodInterceptor.Waiter"p:interceptorNames="greetingAroundAdvice"p:target-ref="target"/></beans>

編寫單元測試

package com.xgj.aop.spring.advice.methodInterceptor;import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;public class MethodInterceptorTest {@Testpublic void test() {ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:com/xgj/aop/spring/advice/methodInterceptor/conf-advice.xml");Waiter waiter = ctx.getBean("waiter", Waiter.class);waiter.greetTo("Xiao");waiter.serverTo("GongJiang");}}

運行結(jié)果

可見環(huán)繞增強起了作用。

《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的Spring-AOP 通过配置文件实现 环绕增强的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。