您好,登錄后才能下訂單哦!
本篇內容主要講解“spring使用<context:load-time-weaver/>實現靜態代理所遇到的問題”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“spring使用<context:load-time-weaver/>實現靜態代理所遇到的問題”吧!
第一步:
創建要實現靜態的類,以及Advice增強類實現,內容如下:
需要靜態代理的類:
public interface IITestBean { void test(); }
public class TestBean implements IITestBean { @Override public void test() { System.out.println("test"); } }
Advice增強類:
@Aspect public class AspectTest { @Pointcut("execution(* *.test(..))") public void test() { System.out.println("我切入了"); } @Before("test()") public void beforeTest() { System.out.println("beforeTest()"); } @After("test()") public void afterTest() { System.out.println("afterTest()"); } @Around("test()") public Object aroundTest(ProceedingJoinPoint p) { System.out.println("before1"); Object o = null; try { o = p.proceed(); } catch (Throwable throwable) { throwable.printStackTrace(); } System.out.println("after1"); return o; } }
第二步:
在class目錄下的META-INF(沒有則創建)文件夾下建立aop.xml,內容如下
<!DOCTYPE aspectj PUBLIC "-//AspectJ//DTD//EN" "http://www.eclipse.org/aspectj/dtd/aspectj.dtd"> <aspectj> <weaver> <include within="com.zzx.study.aspect.*"/> </weaver> <aspects> <aspect name="com.zzx.study.aspect.AspectTest"/> </aspects> </aspectj>
第三步:
編寫spring的配置spring-aspect.xml,內容如下:
<?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" xmlns:context="http://www.springframework.org/schema/context" 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-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <bean id="test" class="com.zzx.study.aspect.TestBean"/> <context:load-time-weaver/> </beans>
第四步:
編寫測試類,內容如下:
public class AspectTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("spring-aspect.xml"); TestBean bean = (TestBean)context.getBean("test"); bean.test(); } }
第五步:
測試時,需下載并引入org.springframework.instrument.jar文件,在idea中配置如下:
第六步:
運行中遇到的問題
問題1:出現了一個java.lang.VerifyError: Expecting a stackmap frame at branch target 7錯誤
解決方法:idea中VM option,需加入-XX:-UseSplitVerifier
問題2:circular advice precedence錯誤
解決方法:
原因Advice增強器AspectTest,必須要按照@Before->@Around->@After編寫代碼,上面代碼調整順利即可。但是在spring動態代理沒有該順序不對,不會拋異常。
第七步:
我們可以看到正常的靜態類代理結果如下:
到此,相信大家對“spring使用<context:load-time-weaver/>實現靜態代理所遇到的問題”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。