千家信息网

spring使用<context:load-time-weaver/>实现静态代理所遇到的问题

发表于:2025-01-30 作者:千家信息网编辑
千家信息网最后更新 2025年01月30日,本篇内容主要讲解"spring使用实现静态代理所遇到的问题",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"spring使用实现静态代理所遇到的问题"吧!第一
千家信息网最后更新 2025年01月30日spring使用<context:load-time-weaver/>实现静态代理所遇到的问题

本篇内容主要讲解"spring使用实现静态代理所遇到的问题",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"spring使用实现静态代理所遇到的问题"吧!

第一步:

创建要实现静态的类,以及Advice增强类实现,内容如下:

需要静态代理的类:

public interface IITestBean {    void test();}
public class TestBean implements IITestBean {    @Override    public void test() {        System.out.println("test");    }}

Advice增强类:

@Aspectpublic 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,内容如下

                                

第三步:

编写spring的配置spring-aspect.xml,内容如下:

        

第四步:

编写测试类,内容如下:

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使用实现静态代理所遇到的问题"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

0